{{this.system.effet}}
{{/if}} + {{#if this.system.degats}}Degats : {{this.system.degats}}
{{/if}} +diff --git a/assets/fonts/im-fell-english-sc.ttf b/assets/fonts/im-fell-english-sc.ttf new file mode 100644 index 0000000..3d0f181 Binary files /dev/null and b/assets/fonts/im-fell-english-sc.ttf differ diff --git a/assets/icons/items/imported/angon.svg b/assets/icons/items/imported/angon.svg new file mode 100644 index 0000000..f598220 --- /dev/null +++ b/assets/icons/items/imported/angon.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/arbalete-a-repetition.svg b/assets/icons/items/imported/arbalete-a-repetition.svg new file mode 100644 index 0000000..57174cd --- /dev/null +++ b/assets/icons/items/imported/arbalete-a-repetition.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/arc-court.svg b/assets/icons/items/imported/arc-court.svg new file mode 100644 index 0000000..43f2183 --- /dev/null +++ b/assets/icons/items/imported/arc-court.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/arc-de-chasse.svg b/assets/icons/items/imported/arc-de-chasse.svg new file mode 100644 index 0000000..43f2183 --- /dev/null +++ b/assets/icons/items/imported/arc-de-chasse.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/arc-nomade.svg b/assets/icons/items/imported/arc-nomade.svg new file mode 100644 index 0000000..43f2183 --- /dev/null +++ b/assets/icons/items/imported/arc-nomade.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/arquebuse.svg b/assets/icons/items/imported/arquebuse.svg new file mode 100644 index 0000000..1a825ef --- /dev/null +++ b/assets/icons/items/imported/arquebuse.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/bardiche.svg b/assets/icons/items/imported/bardiche.svg new file mode 100644 index 0000000..1e058c0 --- /dev/null +++ b/assets/icons/items/imported/bardiche.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/baton-cloute.svg b/assets/icons/items/imported/baton-cloute.svg new file mode 100644 index 0000000..55660fa --- /dev/null +++ b/assets/icons/items/imported/baton-cloute.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/baton-fronde.svg b/assets/icons/items/imported/baton-fronde.svg new file mode 100644 index 0000000..5391c0c --- /dev/null +++ b/assets/icons/items/imported/baton-fronde.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/bolas.svg b/assets/icons/items/imported/bolas.svg new file mode 100644 index 0000000..36dd4ff --- /dev/null +++ b/assets/icons/items/imported/bolas.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/bouclier-de-bois.svg b/assets/icons/items/imported/bouclier-de-bois.svg new file mode 100644 index 0000000..a2ac351 --- /dev/null +++ b/assets/icons/items/imported/bouclier-de-bois.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/brigandine.svg b/assets/icons/items/imported/brigandine.svg new file mode 100644 index 0000000..6af624d --- /dev/null +++ b/assets/icons/items/imported/brigandine.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/broigne.svg b/assets/icons/items/imported/broigne.svg new file mode 100644 index 0000000..6af624d --- /dev/null +++ b/assets/icons/items/imported/broigne.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/casque-rouille-4.svg b/assets/icons/items/imported/casque-rouille-4.svg new file mode 100644 index 0000000..06c58ec --- /dev/null +++ b/assets/icons/items/imported/casque-rouille-4.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cimeterre.svg b/assets/icons/items/imported/cimeterre.svg new file mode 100644 index 0000000..64adcf4 --- /dev/null +++ b/assets/icons/items/imported/cimeterre.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cotte-d-anneaux.svg b/assets/icons/items/imported/cotte-d-anneaux.svg new file mode 100644 index 0000000..42ef8b7 --- /dev/null +++ b/assets/icons/items/imported/cotte-d-anneaux.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/couleuvrine.svg b/assets/icons/items/imported/couleuvrine.svg new file mode 100644 index 0000000..1a825ef --- /dev/null +++ b/assets/icons/items/imported/couleuvrine.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/coutelas.svg b/assets/icons/items/imported/coutelas.svg new file mode 100644 index 0000000..b6bee6c --- /dev/null +++ b/assets/icons/items/imported/coutelas.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cuir-bouilli.svg b/assets/icons/items/imported/cuir-bouilli.svg new file mode 100644 index 0000000..c05cfcf --- /dev/null +++ b/assets/icons/items/imported/cuir-bouilli.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cuir-cloute.svg b/assets/icons/items/imported/cuir-cloute.svg new file mode 100644 index 0000000..c05cfcf --- /dev/null +++ b/assets/icons/items/imported/cuir-cloute.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cuir-maille-et-pavois.svg b/assets/icons/items/imported/cuir-maille-et-pavois.svg new file mode 100644 index 0000000..92d84b1 --- /dev/null +++ b/assets/icons/items/imported/cuir-maille-et-pavois.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cuir-moisi-et-maille-rouillee.svg b/assets/icons/items/imported/cuir-moisi-et-maille-rouillee.svg new file mode 100644 index 0000000..92d84b1 --- /dev/null +++ b/assets/icons/items/imported/cuir-moisi-et-maille-rouillee.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cuir-renforce-4-et-petit-bouclier.svg b/assets/icons/items/imported/cuir-renforce-4-et-petit-bouclier.svg new file mode 100644 index 0000000..92d84b1 --- /dev/null +++ b/assets/icons/items/imported/cuir-renforce-4-et-petit-bouclier.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cuir-renforce-4.svg b/assets/icons/items/imported/cuir-renforce-4.svg new file mode 100644 index 0000000..c05cfcf --- /dev/null +++ b/assets/icons/items/imported/cuir-renforce-4.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cuirasse-6.svg b/assets/icons/items/imported/cuirasse-6.svg new file mode 100644 index 0000000..6af624d --- /dev/null +++ b/assets/icons/items/imported/cuirasse-6.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cuirasse-8.svg b/assets/icons/items/imported/cuirasse-8.svg new file mode 100644 index 0000000..6af624d --- /dev/null +++ b/assets/icons/items/imported/cuirasse-8.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cuirasse-damasquinee.svg b/assets/icons/items/imported/cuirasse-damasquinee.svg new file mode 100644 index 0000000..6af624d --- /dev/null +++ b/assets/icons/items/imported/cuirasse-damasquinee.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cuirasse-maille-et-coiffe.svg b/assets/icons/items/imported/cuirasse-maille-et-coiffe.svg new file mode 100644 index 0000000..92d84b1 --- /dev/null +++ b/assets/icons/items/imported/cuirasse-maille-et-coiffe.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/cuirasse-rouillee.svg b/assets/icons/items/imported/cuirasse-rouillee.svg new file mode 100644 index 0000000..6af624d --- /dev/null +++ b/assets/icons/items/imported/cuirasse-rouillee.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/dague.svg b/assets/icons/items/imported/dague.svg new file mode 100644 index 0000000..b6bee6c --- /dev/null +++ b/assets/icons/items/imported/dague.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/epee-batarde.svg b/assets/icons/items/imported/epee-batarde.svg new file mode 100644 index 0000000..64adcf4 --- /dev/null +++ b/assets/icons/items/imported/epee-batarde.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/epee-courte.svg b/assets/icons/items/imported/epee-courte.svg new file mode 100644 index 0000000..64adcf4 --- /dev/null +++ b/assets/icons/items/imported/epee-courte.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/epee-et-main-gauche.svg b/assets/icons/items/imported/epee-et-main-gauche.svg new file mode 100644 index 0000000..64adcf4 --- /dev/null +++ b/assets/icons/items/imported/epee-et-main-gauche.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/faux.svg b/assets/icons/items/imported/faux.svg new file mode 100644 index 0000000..4e3d79c --- /dev/null +++ b/assets/icons/items/imported/faux.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/fleau-d-armes.svg b/assets/icons/items/imported/fleau-d-armes.svg new file mode 100644 index 0000000..b327fcf --- /dev/null +++ b/assets/icons/items/imported/fleau-d-armes.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/flechettes.svg b/assets/icons/items/imported/flechettes.svg new file mode 100644 index 0000000..f598220 --- /dev/null +++ b/assets/icons/items/imported/flechettes.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/fouet.svg b/assets/icons/items/imported/fouet.svg new file mode 100644 index 0000000..3496d63 --- /dev/null +++ b/assets/icons/items/imported/fouet.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/framee.svg b/assets/icons/items/imported/framee.svg new file mode 100644 index 0000000..f598220 --- /dev/null +++ b/assets/icons/items/imported/framee.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/francisque.svg b/assets/icons/items/imported/francisque.svg new file mode 100644 index 0000000..1e058c0 --- /dev/null +++ b/assets/icons/items/imported/francisque.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/fronde-billes-d-acier.svg b/assets/icons/items/imported/fronde-billes-d-acier.svg new file mode 100644 index 0000000..5391c0c --- /dev/null +++ b/assets/icons/items/imported/fronde-billes-d-acier.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/fronde.svg b/assets/icons/items/imported/fronde.svg new file mode 100644 index 0000000..5391c0c --- /dev/null +++ b/assets/icons/items/imported/fronde.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/gambison.svg b/assets/icons/items/imported/gambison.svg new file mode 100644 index 0000000..c05cfcf --- /dev/null +++ b/assets/icons/items/imported/gambison.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/glaive.svg b/assets/icons/items/imported/glaive.svg new file mode 100644 index 0000000..4e3d79c --- /dev/null +++ b/assets/icons/items/imported/glaive.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/gourdin.svg b/assets/icons/items/imported/gourdin.svg new file mode 100644 index 0000000..55660fa --- /dev/null +++ b/assets/icons/items/imported/gourdin.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/grenades.svg b/assets/icons/items/imported/grenades.svg new file mode 100644 index 0000000..327e31e --- /dev/null +++ b/assets/icons/items/imported/grenades.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/guisarme.svg b/assets/icons/items/imported/guisarme.svg new file mode 100644 index 0000000..4e3d79c --- /dev/null +++ b/assets/icons/items/imported/guisarme.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/hache-de-guerre.svg b/assets/icons/items/imported/hache-de-guerre.svg new file mode 100644 index 0000000..1e058c0 --- /dev/null +++ b/assets/icons/items/imported/hache-de-guerre.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/haches-de-lancer.svg b/assets/icons/items/imported/haches-de-lancer.svg new file mode 100644 index 0000000..1e058c0 --- /dev/null +++ b/assets/icons/items/imported/haches-de-lancer.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/hachette.svg b/assets/icons/items/imported/hachette.svg new file mode 100644 index 0000000..1e058c0 --- /dev/null +++ b/assets/icons/items/imported/hachette.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/hallebarde.svg b/assets/icons/items/imported/hallebarde.svg new file mode 100644 index 0000000..4e3d79c --- /dev/null +++ b/assets/icons/items/imported/hallebarde.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/harnois-de-cuir.svg b/assets/icons/items/imported/harnois-de-cuir.svg new file mode 100644 index 0000000..c05cfcf --- /dev/null +++ b/assets/icons/items/imported/harnois-de-cuir.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/harnois-et-bouclier.svg b/assets/icons/items/imported/harnois-et-bouclier.svg new file mode 100644 index 0000000..92d84b1 --- /dev/null +++ b/assets/icons/items/imported/harnois-et-bouclier.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/haubert-rouille.svg b/assets/icons/items/imported/haubert-rouille.svg new file mode 100644 index 0000000..42ef8b7 --- /dev/null +++ b/assets/icons/items/imported/haubert-rouille.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/haubert.svg b/assets/icons/items/imported/haubert.svg new file mode 100644 index 0000000..42ef8b7 --- /dev/null +++ b/assets/icons/items/imported/haubert.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/javeline.svg b/assets/icons/items/imported/javeline.svg new file mode 100644 index 0000000..f598220 --- /dev/null +++ b/assets/icons/items/imported/javeline.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/javelot.svg b/assets/icons/items/imported/javelot.svg new file mode 100644 index 0000000..f598220 --- /dev/null +++ b/assets/icons/items/imported/javelot.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/katana.svg b/assets/icons/items/imported/katana.svg new file mode 100644 index 0000000..64adcf4 --- /dev/null +++ b/assets/icons/items/imported/katana.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/lame-boomerang.svg b/assets/icons/items/imported/lame-boomerang.svg new file mode 100644 index 0000000..f598220 --- /dev/null +++ b/assets/icons/items/imported/lame-boomerang.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/lance-javelot.svg b/assets/icons/items/imported/lance-javelot.svg new file mode 100644 index 0000000..f598220 --- /dev/null +++ b/assets/icons/items/imported/lance-javelot.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/lance.svg b/assets/icons/items/imported/lance.svg new file mode 100644 index 0000000..4e3d79c --- /dev/null +++ b/assets/icons/items/imported/lance.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/lorique-mal-ajustee.svg b/assets/icons/items/imported/lorique-mal-ajustee.svg new file mode 100644 index 0000000..6af624d --- /dev/null +++ b/assets/icons/items/imported/lorique-mal-ajustee.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/machette.svg b/assets/icons/items/imported/machette.svg new file mode 100644 index 0000000..64adcf4 --- /dev/null +++ b/assets/icons/items/imported/machette.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/maille-trouee.svg b/assets/icons/items/imported/maille-trouee.svg new file mode 100644 index 0000000..42ef8b7 --- /dev/null +++ b/assets/icons/items/imported/maille-trouee.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/manteau-de-cuir-et-bouclier-rond.svg b/assets/icons/items/imported/manteau-de-cuir-et-bouclier-rond.svg new file mode 100644 index 0000000..92d84b1 --- /dev/null +++ b/assets/icons/items/imported/manteau-de-cuir-et-bouclier-rond.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/marteau-de-guerre.svg b/assets/icons/items/imported/marteau-de-guerre.svg new file mode 100644 index 0000000..55660fa --- /dev/null +++ b/assets/icons/items/imported/marteau-de-guerre.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/masse-d-armes.svg b/assets/icons/items/imported/masse-d-armes.svg new file mode 100644 index 0000000..55660fa --- /dev/null +++ b/assets/icons/items/imported/masse-d-armes.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/masse-de-guerre.svg b/assets/icons/items/imported/masse-de-guerre.svg new file mode 100644 index 0000000..55660fa --- /dev/null +++ b/assets/icons/items/imported/masse-de-guerre.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/massue-cloutee.svg b/assets/icons/items/imported/massue-cloutee.svg new file mode 100644 index 0000000..55660fa --- /dev/null +++ b/assets/icons/items/imported/massue-cloutee.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/matraque.svg b/assets/icons/items/imported/matraque.svg new file mode 100644 index 0000000..55660fa --- /dev/null +++ b/assets/icons/items/imported/matraque.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/mousquet.svg b/assets/icons/items/imported/mousquet.svg new file mode 100644 index 0000000..1a825ef --- /dev/null +++ b/assets/icons/items/imported/mousquet.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/pertuisane.svg b/assets/icons/items/imported/pertuisane.svg new file mode 100644 index 0000000..4e3d79c --- /dev/null +++ b/assets/icons/items/imported/pertuisane.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/pierres-polies.svg b/assets/icons/items/imported/pierres-polies.svg new file mode 100644 index 0000000..5391c0c --- /dev/null +++ b/assets/icons/items/imported/pierres-polies.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/pique.svg b/assets/icons/items/imported/pique.svg new file mode 100644 index 0000000..4e3d79c --- /dev/null +++ b/assets/icons/items/imported/pique.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/pistolet-de-duel.svg b/assets/icons/items/imported/pistolet-de-duel.svg new file mode 100644 index 0000000..24f7ade --- /dev/null +++ b/assets/icons/items/imported/pistolet-de-duel.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/plaque-complete-et-ecu.svg b/assets/icons/items/imported/plaque-complete-et-ecu.svg new file mode 100644 index 0000000..92d84b1 --- /dev/null +++ b/assets/icons/items/imported/plaque-complete-et-ecu.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/plaque-ouvragee.svg b/assets/icons/items/imported/plaque-ouvragee.svg new file mode 100644 index 0000000..6af624d --- /dev/null +++ b/assets/icons/items/imported/plaque-ouvragee.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/plaque-rouillee.svg b/assets/icons/items/imported/plaque-rouillee.svg new file mode 100644 index 0000000..6af624d --- /dev/null +++ b/assets/icons/items/imported/plaque-rouillee.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/poignards-de-jet.svg b/assets/icons/items/imported/poignards-de-jet.svg new file mode 100644 index 0000000..f598220 --- /dev/null +++ b/assets/icons/items/imported/poignards-de-jet.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/rapiere.svg b/assets/icons/items/imported/rapiere.svg new file mode 100644 index 0000000..64adcf4 --- /dev/null +++ b/assets/icons/items/imported/rapiere.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/shurikens-lourds.svg b/assets/icons/items/imported/shurikens-lourds.svg new file mode 100644 index 0000000..2ca486e --- /dev/null +++ b/assets/icons/items/imported/shurikens-lourds.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/shurikens.svg b/assets/icons/items/imported/shurikens.svg new file mode 100644 index 0000000..2ca486e --- /dev/null +++ b/assets/icons/items/imported/shurikens.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/tromblon.svg b/assets/icons/items/imported/tromblon.svg new file mode 100644 index 0000000..1a825ef --- /dev/null +++ b/assets/icons/items/imported/tromblon.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/tunique-de-cuir-et-toque-4.svg b/assets/icons/items/imported/tunique-de-cuir-et-toque-4.svg new file mode 100644 index 0000000..92d84b1 --- /dev/null +++ b/assets/icons/items/imported/tunique-de-cuir-et-toque-4.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/tunique-de-mailles.svg b/assets/icons/items/imported/tunique-de-mailles.svg new file mode 100644 index 0000000..42ef8b7 --- /dev/null +++ b/assets/icons/items/imported/tunique-de-mailles.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/items/imported/wakizashi.svg b/assets/icons/items/imported/wakizashi.svg new file mode 100644 index 0000000..64adcf4 --- /dev/null +++ b/assets/icons/items/imported/wakizashi.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/actors/employe.svg b/assets/icons/system/actors/employe.svg new file mode 100644 index 0000000..211eac4 --- /dev/null +++ b/assets/icons/system/actors/employe.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/actors/pnj.svg b/assets/icons/system/actors/pnj.svg new file mode 100644 index 0000000..3d5e8c6 --- /dev/null +++ b/assets/icons/system/actors/pnj.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/arpentage.svg b/assets/icons/system/departments/arpentage.svg new file mode 100644 index 0000000..8b44840 --- /dev/null +++ b/assets/icons/system/departments/arpentage.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/conception.svg b/assets/icons/system/departments/conception.svg new file mode 100644 index 0000000..cd447b7 --- /dev/null +++ b/assets/icons/system/departments/conception.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/conditionnement.svg b/assets/icons/system/departments/conditionnement.svg new file mode 100644 index 0000000..7896dce --- /dev/null +++ b/assets/icons/system/departments/conditionnement.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/entrees-sorties.svg b/assets/icons/system/departments/entrees-sorties.svg new file mode 100644 index 0000000..622f7b2 --- /dev/null +++ b/assets/icons/system/departments/entrees-sorties.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/entretien.svg b/assets/icons/system/departments/entretien.svg new file mode 100644 index 0000000..334e9a4 --- /dev/null +++ b/assets/icons/system/departments/entretien.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/exploration.svg b/assets/icons/system/departments/exploration.svg new file mode 100644 index 0000000..f0f29fa --- /dev/null +++ b/assets/icons/system/departments/exploration.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/materiel.svg b/assets/icons/system/departments/materiel.svg new file mode 100644 index 0000000..b330ae6 --- /dev/null +++ b/assets/icons/system/departments/materiel.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/reception.svg b/assets/icons/system/departments/reception.svg new file mode 100644 index 0000000..924d635 --- /dev/null +++ b/assets/icons/system/departments/reception.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/reclame.svg b/assets/icons/system/departments/reclame.svg new file mode 100644 index 0000000..3499cac --- /dev/null +++ b/assets/icons/system/departments/reclame.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/recrutement.svg b/assets/icons/system/departments/recrutement.svg new file mode 100644 index 0000000..532222a --- /dev/null +++ b/assets/icons/system/departments/recrutement.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/relations-interieures.svg b/assets/icons/system/departments/relations-interieures.svg new file mode 100644 index 0000000..52412e3 --- /dev/null +++ b/assets/icons/system/departments/relations-interieures.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/relations-mecenes.svg b/assets/icons/system/departments/relations-mecenes.svg new file mode 100644 index 0000000..2413e68 --- /dev/null +++ b/assets/icons/system/departments/relations-mecenes.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/supervision.svg b/assets/icons/system/departments/supervision.svg new file mode 100644 index 0000000..31fc786 --- /dev/null +++ b/assets/icons/system/departments/supervision.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/departments/terminaison.svg b/assets/icons/system/departments/terminaison.svg new file mode 100644 index 0000000..d53b5bd --- /dev/null +++ b/assets/icons/system/departments/terminaison.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/items/arme.svg b/assets/icons/system/items/arme.svg new file mode 100644 index 0000000..64adcf4 --- /dev/null +++ b/assets/icons/system/items/arme.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/items/armure.svg b/assets/icons/system/items/armure.svg new file mode 100644 index 0000000..a2ac351 --- /dev/null +++ b/assets/icons/system/items/armure.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/items/autre.svg b/assets/icons/system/items/autre.svg new file mode 100644 index 0000000..f1137e2 --- /dev/null +++ b/assets/icons/system/items/autre.svg @@ -0,0 +1,10 @@ + + diff --git a/assets/icons/system/items/capacite.svg b/assets/icons/system/items/capacite.svg new file mode 100644 index 0000000..4fc3a0b --- /dev/null +++ b/assets/icons/system/items/capacite.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/items/consommable.svg b/assets/icons/system/items/consommable.svg new file mode 100644 index 0000000..8bcf097 --- /dev/null +++ b/assets/icons/system/items/consommable.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/items/equipement.svg b/assets/icons/system/items/equipement.svg new file mode 100644 index 0000000..5f5f26c --- /dev/null +++ b/assets/icons/system/items/equipement.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/items/langue.svg b/assets/icons/system/items/langue.svg new file mode 100644 index 0000000..88ca23f --- /dev/null +++ b/assets/icons/system/items/langue.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/items/sortilege.svg b/assets/icons/system/items/sortilege.svg new file mode 100644 index 0000000..e90da0f --- /dev/null +++ b/assets/icons/system/items/sortilege.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/items/trait.svg b/assets/icons/system/items/trait.svg new file mode 100644 index 0000000..7857e06 --- /dev/null +++ b/assets/icons/system/items/trait.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/mechanics/avertissement.svg b/assets/icons/system/mechanics/avertissement.svg new file mode 100644 index 0000000..1ce0ac0 --- /dev/null +++ b/assets/icons/system/mechanics/avertissement.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/mechanics/chaos.svg b/assets/icons/system/mechanics/chaos.svg new file mode 100644 index 0000000..899c3f5 --- /dev/null +++ b/assets/icons/system/mechanics/chaos.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/mechanics/de-de-vie.svg b/assets/icons/system/mechanics/de-de-vie.svg new file mode 100644 index 0000000..2eb8605 --- /dev/null +++ b/assets/icons/system/mechanics/de-de-vie.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/mechanics/degats.svg b/assets/icons/system/mechanics/degats.svg new file mode 100644 index 0000000..ba276da --- /dev/null +++ b/assets/icons/system/mechanics/degats.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/mechanics/faveur.svg b/assets/icons/system/mechanics/faveur.svg new file mode 100644 index 0000000..02a98cd --- /dev/null +++ b/assets/icons/system/mechanics/faveur.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/mechanics/focus.svg b/assets/icons/system/mechanics/focus.svg new file mode 100644 index 0000000..8f4c20f --- /dev/null +++ b/assets/icons/system/mechanics/focus.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/mechanics/initiative.svg b/assets/icons/system/mechanics/initiative.svg new file mode 100644 index 0000000..1fa76c6 --- /dev/null +++ b/assets/icons/system/mechanics/initiative.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/mechanics/mission.svg b/assets/icons/system/mechanics/mission.svg new file mode 100644 index 0000000..c97f17b --- /dev/null +++ b/assets/icons/system/mechanics/mission.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/mechanics/objectif.svg b/assets/icons/system/mechanics/objectif.svg new file mode 100644 index 0000000..4fc3a0b --- /dev/null +++ b/assets/icons/system/mechanics/objectif.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/icons/system/mechanics/suspicion.svg b/assets/icons/system/mechanics/suspicion.svg new file mode 100644 index 0000000..d035f0e --- /dev/null +++ b/assets/icons/system/mechanics/suspicion.svg @@ -0,0 +1,6 @@ + + diff --git a/assets/ui/logo_01.webp b/assets/ui/logo_01.webp new file mode 100644 index 0000000..bd23f0f Binary files /dev/null and b/assets/ui/logo_01.webp differ diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..0dd841a --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,22 @@ +import gulp from "gulp"; +import less from "gulp-less"; +import rename from "gulp-rename"; +import sourcemaps from "gulp-sourcemaps"; + +function styles() { + return gulp.src("less/donjon-et-cie.less") + .pipe(sourcemaps.init()) + .pipe(less()) + .pipe(rename("donjon-et-cie.css")) + .pipe(sourcemaps.write(".")) + .pipe(gulp.dest("styles/")); +} + +function watchFiles() { + gulp.watch("less/**/*.less", styles); +} + +export { styles }; +export const build = gulp.series(styles); +export const watch = gulp.series(build, watchFiles); +export default build; diff --git a/lang/fr.json b/lang/fr.json new file mode 100644 index 0000000..d98e654 --- /dev/null +++ b/lang/fr.json @@ -0,0 +1,30 @@ +{ + "TYPES.Actor.employe": "Employe", + "TYPES.Actor.pnj": "PNJ", + "TYPES.Item.trait": "Trait", + "TYPES.Item.langue": "Langue", + "TYPES.Item.capacite": "Capacite", + "TYPES.Item.sortilege": "Sortilege", + "TYPES.Item.arme": "Arme", + "TYPES.Item.armure": "Armure", + "TYPES.Item.equipement": "Equipement", + "TYPES.Item.consommable": "Consommable", + "DNC.Roll.Characteristic": "Jet de caracteristique", + "DNC.Roll.Attack": "Jet d'attaque", + "DNC.Roll.Damage": "Jet de degats", + "DNC.Roll.Favor": "Faveur", + "DNC.Roll.HitDice": "Jet de de de vie", + "DNC.Roll.Initiative": "Initiative", + "DNC.Roll.Spell": "Lancement de sort", + "DNC.Roll.Usage": "Jet de de d'usage", + "DNC.Chat.Roll": "Resultat de jet", + "DNC.Chat.Item": "Objet", + "DNC.Chat.DamageApplied": "Degats appliques", + "DNC.Chat.SelectTarget": "Choisissez une cible presente sur la scene.", + "DNC.Chat.TargetUnavailable": "La cible selectionnee n'est plus disponible.", + "DNC.Chat.InvalidDamageTarget": "Impossible d'appliquer les degats a cette cible.", + "DNC.Sheet.Create": "Creer", + "DNC.Sheet.Delete": "Supprimer", + "DNC.Sheet.Edit": "Editer", + "DNC.Sheet.Post": "Poster dans le chat" +} diff --git a/less/actor-sheet.less b/less/actor-sheet.less new file mode 100644 index 0000000..c10af48 --- /dev/null +++ b/less/actor-sheet.less @@ -0,0 +1,267 @@ +.characteristic-list { + display: flex; + flex-direction: column; + gap: @spacing-sm; +} + +.characteristic-row { + display: grid; + grid-template-columns: 2rem 1fr 4rem; + gap: @spacing-sm; + align-items: center; +} + +.characteristic-label { + font-weight: 700; +} + +.profile-counters { + display: grid; + grid-template-columns: 1fr; + gap: @spacing-md; +} + +.profile-card-wide { + width: 100%; +} + +.profile-layout { + display: grid; + grid-template-columns: minmax(0, 1.15fr) minmax(320px, 0.85fr); + gap: @spacing-lg; + align-items: start; +} + +.profile-column { + display: flex; + flex-direction: column; + gap: @spacing-md; +} + +.favor-card { + margin: @spacing-md 0; + padding: @spacing-md; + border: 1px dashed fade(@color-border, 55%); + border-radius: @radius-md; + background: fade(@color-panel-strong, 35%); +} + +.favor-header h2 { + margin-bottom: @spacing-sm; +} + +.favor-help { + margin: 0 0 @spacing-md; + color: @color-muted; + font-size: 0.82rem; +} + +.favor-list { + display: grid; + gap: @spacing-sm; +} + +.favor-row { + display: grid; + grid-template-columns: minmax(0, 1fr) 4.5rem auto; + gap: @spacing-sm; + align-items: end; +} + +.favor-meta { + min-height: 2.3rem; + display: flex; + align-items: center; + justify-content: center; + border-radius: @radius-sm; + background: rgba(255, 255, 255, 0.7); + border: 1px solid fade(@color-border, 35%); + font-weight: 700; +} + +.magic-layout { + align-items: start; + margin-bottom: @spacing-md; +} + +.magic-layout .sheet-column { + display: flex; + flex-direction: column; + gap: @spacing-md; +} + +.magic-resource-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); + gap: @spacing-md; + align-items: end; +} + +.chaos-table-wrapper { + margin-top: @spacing-md; +} + +.chaos-table-wrapper h3 { + margin: 0 0 @spacing-sm; + font-size: 0.95rem; +} + +.chaos-table-caption { + margin: 0 0 @spacing-sm; + color: @color-muted; + font-size: 0.78rem; + font-style: italic; +} + +.chaos-table { + width: 100%; + border-collapse: collapse; + font-size: 0.8rem; +} + +.chaos-table th, +.chaos-table td { + padding: 0.4rem 0.45rem; + border: 1px solid fade(@color-border, 35%); + vertical-align: top; +} + +.chaos-table th { + text-align: left; + background: fade(@color-panel-strong, 55%); +} + +.sheet-tabs { + display: flex; + flex-wrap: wrap; + gap: @spacing-sm; + margin: @spacing-lg 0 @spacing-md; + justify-content: center; +} + +.sheet-tab { + border: 1px solid fade(@color-border, 80%); + border-radius: @radius-md; + background: fade(@color-panel-strong, 55%); + color: @color-ink; + font-weight: 700; + padding: @spacing-sm @spacing-md; +} + +.sheet-tab.active { + background: @color-accent; + border-color: darken(@color-accent, 12%); + color: #fff; +} + +.sheet-tab-panel { + display: none; +} + +.sheet-tab-panel.active { + display: block; +} + +.item-list { + display: flex; + flex-direction: column; + gap: @spacing-md; +} + +.item-section.is-dragover { + border-color: @color-accent; + box-shadow: 0 0 0 2px fade(@color-accent, 20%); +} + +.item-dropzone { + border: 1px dashed fade(@color-border, 75%); + border-radius: @radius-md; + padding: @spacing-md; + min-height: 3.25rem; + background: fade(@color-panel-strong, 45%); + color: @color-muted; + display: flex; + align-items: center; + justify-content: center; + text-align: center; + font-size: 0.9rem; + font-weight: 600; +} + +.item-dropzone.has-items { + padding: @spacing-sm @spacing-md; + font-size: 0.8rem; +} + +.item-section.is-dragover .item-dropzone { + border-color: @color-accent; + background: fade(@color-accent, 12%); + color: @color-ink; +} + +.item { + display: grid; + grid-template-columns: 48px 1fr auto; + gap: @spacing-md; + align-items: start; + border-top: 1px dashed fade(@color-border, 45%); + padding-top: @spacing-md; +} + +.item:first-child { + border-top: 0; + padding-top: 0; +} + +.item img { + width: 48px; + height: 48px; + object-fit: cover; + border-radius: @radius-sm; + border: 1px solid @color-border; + background: #fff; +} + +.item-main p { + margin: @spacing-sm 0 0; + color: @color-muted; +} + +.item-title-row { + display: flex; + flex-wrap: wrap; + gap: @spacing-sm; + align-items: center; +} + +.item-meta { + border-radius: 999px; + background: @color-panel-strong; + color: @color-ink; + font-size: 0.75rem; + padding: 0.1rem 0.5rem; +} + +.item-actions { + display: flex; + flex-wrap: wrap; + gap: @spacing-sm; + justify-content: flex-end; +} + +.pnj-layout .sheet-column { + display: flex; + flex-direction: column; + gap: @spacing-md; +} + +.pnj-combat-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: @spacing-md; + align-items: end; +} + +.pnj-combat-grid .span-two { + grid-column: 1 / -1; +} diff --git a/less/base.less b/less/base.less new file mode 100644 index 0000000..0968d73 --- /dev/null +++ b/less/base.less @@ -0,0 +1,232 @@ +.fvtt-donjon-et-cie { + --dnc-ink: @color-ink; + --dnc-accent: @color-accent; +} + +.fvtt-donjon-et-cie .window-content { + font-family: @font-body; + color: @color-ink; + background: linear-gradient(180deg, #f8f1e6 0%, #eadac0 100%); +} + +#pause { + font-size: 2rem; +} + +#pause.paused { + gap: 0.5rem; +} + +#pause > figcaption { + color: #ccc; + text-shadow: 0 0 10px rgba(255, 255, 255, 0.25); +} + +#pause > img { + opacity: 0; + height: 0; + width: 0; +} + +#pause::before { + content: ""; + display: block; + background: url("../assets/ui/logo_01.webp") center/contain no-repeat; + height: 200px; + width: 200px; + margin-bottom: 0.75rem; + animation: dnc-pause-logo 4.2s ease-in-out infinite; + transform-origin: 50% 50%; + filter: drop-shadow(0 10px 20px rgba(0, 0, 0, 0.35)); +} + +@keyframes dnc-pause-logo { + 0%, + 100% { + transform: scale(0.98) translateY(0); + filter: drop-shadow(0 10px 20px rgba(0, 0, 0, 0.3)); + } + + 50% { + transform: scale(1.03) translateY(-6px); + filter: drop-shadow(0 16px 26px rgba(0, 0, 0, 0.45)); + } +} + +.dnc-sheet { + display: flex; + flex-direction: column; + gap: @spacing-lg; + padding: @spacing-lg; +} + +.sheet-card { + border: 2px solid @color-border; + border-radius: @radius-md; + background: rgba(255, 248, 236, 0.92); + box-shadow: 0 6px 14px @color-shadow; + padding: @spacing-lg; +} + +.fvtt-donjon-et-cie .sheet-card h2, +.fvtt-donjon-et-cie .dnc-chat-card h2 { + margin: 0 0 @spacing-md; + font-family: @font-display !important; + font-size: 1.15rem; + color: @color-accent; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.sheet-header { + display: grid; + grid-template-columns: 140px 1fr; + gap: @spacing-lg; + align-items: start; +} + +.sheet-header.compact { + grid-template-columns: 110px 1fr; + gap: @spacing-md; +} + +.portrait { + position: relative; +} + +.portrait img { + width: 100%; + aspect-ratio: 1; + object-fit: cover; + border-radius: @radius-md; + border: 3px solid @color-border; + background: #fff; +} + +.icon-button { + position: absolute; + right: @spacing-sm; + bottom: @spacing-sm; + border: 0; + border-radius: 999px; + background: @color-panel-dark; + color: #fff; + width: 2rem; + height: 2rem; +} + +.identity-grid, +.identity-grid.two-columns { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: @spacing-md; +} + +.identity-grid.two-columns { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.dnc-employe-sheet .sheet-header.compact .identity-grid { + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: @spacing-sm @spacing-md; +} + +.dnc-employe-sheet .sheet-header.compact label { + gap: 0.25rem; +} + +.dnc-employe-sheet .sheet-header.compact input[type="number"] { + max-width: 4.75rem; +} + +.dnc-employe-sheet .sheet-header.compact .counter-field input[type="number"] { + max-width: 4rem; +} + +.dnc-pnj-sheet .sheet-header.compact .identity-grid { + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: @spacing-sm @spacing-md; +} + +.dnc-pnj-sheet .sheet-header.compact label { + gap: 0.25rem; +} + +.dnc-pnj-sheet .sheet-header.compact input[type="number"] { + width: 4.5rem; + max-width: 4.5rem; +} + +.dnc-pnj-sheet .sheet-header.compact .counter-field input[type="number"] { + width: 3.75rem; + max-width: 3.75rem; +} + +.dnc-sheet label { + display: flex; + flex-direction: column; + gap: @spacing-sm; +} + +.dnc-sheet label > span { + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: @color-muted; +} + +.readonly-field { + display: flex; + flex-direction: column; + gap: @spacing-sm; +} + +.readonly-field > span { + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: @color-muted; +} + +.readonly-field p { + margin: 0; + border: 1px solid rgba(91, 70, 52, 0.55); + border-radius: 6px; + background: rgba(255, 255, 255, 0.65); + color: #221b18; + padding: 0.45rem 0.55rem; +} + +.dnc-sheet input, +.dnc-sheet select, +.dnc-sheet textarea, +.dnc-dialog-form input, +.dnc-dialog-form select { + width: 100%; + border: 1px solid fade(@color-border, 55%); + border-radius: @radius-sm; + background: rgba(255, 255, 255, 0.9); + color: @color-ink; + padding: 0.45rem 0.55rem; +} + +.dnc-sheet textarea { + resize: vertical; + min-height: 4.5rem; +} + +.sheet-columns { + display: grid; + grid-template-columns: minmax(250px, 320px) 1fr; + gap: @spacing-lg; +} + +.sheet-sections { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: @spacing-lg; +} + +.compact-sections { + grid-template-columns: 1fr; +} diff --git a/less/chat.less b/less/chat.less new file mode 100644 index 0000000..677814d --- /dev/null +++ b/less/chat.less @@ -0,0 +1,465 @@ +.dnc-chat-card { + position: relative; + border: 2px solid @color-border; + border-radius: 16px; + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.78) 0%, rgba(245, 234, 210, 0.92) 100%), + linear-gradient(135deg, #fdf6e7 0%, #e7d2ab 100%); + color: @color-ink; + padding: @spacing-lg; + box-shadow: 0 12px 30px fade(@color-shadow, 18%), inset 0 1px 0 rgba(255, 255, 255, 0.65); + overflow: hidden; +} + +.chat-message .message-content .dnc-chat-card h2 { + margin: 0 !important; + font-size: 0.82rem !important; + line-height: 1.1 !important; + letter-spacing: 0.02em !important; +} + +.dnc-chat-card::before { + content: ""; + position: absolute; + inset: 0; + border-radius: inherit; + pointer-events: none; + background: + radial-gradient(circle at top right, rgba(255, 255, 255, 0.45), transparent 30%), + linear-gradient(90deg, fade(@color-accent, 14%) 0, fade(@color-accent, 14%) 0.3rem, transparent 0.3rem); +} + +.chat-card-header { + position: relative; + z-index: 1; + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: @spacing-md; + margin-bottom: @spacing-md; +} + +.chat-card-heading { + min-width: 0; +} + +.chat-card-kicker { + margin: 0 0 0.25rem; + font-size: 0.7rem; + font-weight: 700; + letter-spacing: 0.16em; + text-transform: uppercase; + color: fade(@color-accent, 80%); +} + +.chat-card-subtitle { + margin: 0.2rem 0 0; + color: @color-muted; +} + +.chat-card-seal, +.chat-card-total { + position: relative; + z-index: 1; + flex: 0 0 auto; +} + +.chat-card-seal { + min-width: 3.4rem; + border-radius: 999px; + border: 1px solid fade(@color-border, 55%); + background: rgba(255, 255, 255, 0.72); + padding: 0.4rem 0.7rem; + text-align: center; + font-size: 0.72rem; + font-weight: 800; + letter-spacing: 0.12em; +} + +.chat-card-seal.success { + color: darken(@color-success, 18%); +} + +.chat-card-seal.failure { + color: darken(@color-failure, 12%); +} + +.chat-card-total { + min-width: 5.75rem; + border-radius: 14px; + border: 1px solid fade(@color-border, 45%); + background: linear-gradient(180deg, rgba(255, 255, 255, 0.82) 0%, rgba(247, 232, 198, 0.95) 100%); + padding: 0.45rem 0.8rem; + text-align: center; +} + +.chat-card-total span { + display: block; + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.14em; + text-transform: uppercase; + color: @color-muted; +} + +.chat-card-total strong { + display: block; + margin-top: 0.15rem; + font-size: 1.8rem; + line-height: 1; + color: @color-accent; +} + +.chat-pill-row { + position: relative; + z-index: 1; + display: flex; + flex-wrap: wrap; + gap: @spacing-sm; + margin-bottom: @spacing-md; +} + +.chat-pill { + border: 1px solid fade(@color-border, 55%); + border-radius: 999px; + background: rgba(255, 255, 255, 0.66); + color: @color-ink; + font-size: 0.78rem; + font-weight: 700; + padding: 0.2rem 0.7rem; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.55); +} + +.chat-pill.success { + background: fade(@color-success, 16%); + color: darken(@color-success, 18%); + border-color: fade(@color-success, 32%); +} + +.chat-pill.failure { + background: fade(@color-failure, 16%); + color: darken(@color-failure, 12%); + border-color: fade(@color-failure, 32%); +} + +.chat-keyline { + position: relative; + z-index: 1; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: @spacing-sm; + margin-bottom: @spacing-md; +} + +.chat-keyline-label { + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.12em; + text-transform: uppercase; + color: @color-muted; +} + +.roll-values { + display: flex; + gap: @spacing-sm; + flex-wrap: wrap; + margin: 0; +} + +.roll-values span { + border: 1px solid fade(@color-border, 45%); + border-radius: 999px; + background: rgba(255, 255, 255, 0.72); + padding: 0.22rem 0.55rem; + font-weight: 700; +} + +.chat-details { + position: relative; + z-index: 1; + margin: @spacing-md 0 0; + padding-left: 1.1rem; +} + +.chat-details-ornate { + margin-top: @spacing-lg; + padding-top: @spacing-md; + border-top: 1px solid fade(@color-border, 35%); +} + +.chat-details li + li { + margin-top: 0.25rem; +} + +.chat-actions { + position: relative; + z-index: 1; + margin-top: @spacing-md; +} + +.chat-action-button { + border: 1px solid @color-border; + border-radius: 999px; + background: linear-gradient(180deg, #f9f0da 0%, #dcb772 100%); + color: @color-ink; + min-height: 2rem; + padding: 0.45rem 0.9rem; + font-weight: 800; + letter-spacing: 0.04em; + box-shadow: 0 6px 14px fade(@color-shadow, 16%); +} + +.chat-action-button[disabled] { + opacity: 0.55; + cursor: not-allowed; + box-shadow: none; +} + +.chat-actions-inline { + display: flex; + flex-wrap: wrap; + gap: @spacing-sm; +} + +.chat-targeting { + position: relative; + z-index: 1; + display: grid; + gap: @spacing-sm; + margin-top: @spacing-sm; +} + +.chat-control { + display: grid; + gap: 0.2rem; +} + +.chat-select { + min-height: 2rem; + border: 1px solid fade(@color-border, 55%); + border-radius: 999px; + background: rgba(255, 255, 255, 0.82); + color: @color-ink; + padding: 0.3rem 0.75rem; +} + +.chat-formula, +.chat-note { + position: relative; + z-index: 1; + margin: 0 0 @spacing-md; +} + +.chat-formula { + display: inline-flex; + align-items: center; + min-height: 2rem; + padding: 0.25rem 0.7rem; + border-radius: 999px; + border: 1px solid fade(@color-border, 38%); + background: rgba(255, 255, 255, 0.5); + font-family: @font-display; + color: @color-muted; +} + +.chat-item-image { + width: 64px; + height: 64px; + object-fit: cover; + border-radius: @radius-sm; + border: 1px solid @color-border; +} + +.chat-item-body { + position: relative; + z-index: 1; + display: grid; + grid-template-columns: 64px 1fr; + gap: @spacing-md; + align-items: start; + margin-bottom: @spacing-md; +} + +.chat-item-content { + min-width: 0; +} + +.chat-description { + position: relative; + z-index: 1; + margin-top: @spacing-md; + padding-top: @spacing-md; + border-top: 1px solid fade(@color-border, 35%); +} + +.warning { + color: @color-failure; + font-weight: 700; +} + +.dnc-chat-card-roll { + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.78) 0%, rgba(236, 228, 205, 0.92) 100%), + linear-gradient(135deg, #fcf8ee 0%, #e4d1af 100%); +} + +.dnc-chat-card-damage { + padding: @spacing-md; + background: + linear-gradient(180deg, rgba(255, 252, 247, 0.76) 0%, rgba(238, 213, 194, 0.92) 100%), + linear-gradient(135deg, #fff4e8 0%, #d7a884 100%); +} + +.dnc-chat-card-damage .chat-card-header, +.dnc-chat-card-damage .chat-pill-row, +.dnc-chat-card-damage .chat-keyline, +.dnc-chat-card-damage .chat-formula, +.dnc-chat-card-damage .chat-note { + margin-bottom: @spacing-sm; +} + +.dnc-chat-card-damage .chat-card-total { + min-width: 4.8rem; + padding: 0.35rem 0.65rem; +} + +.dnc-chat-card-damage .chat-card-total strong { + font-size: 1.45rem; +} + +.dnc-chat-card-damage .chat-formula { + min-height: 1.7rem; + padding: 0.15rem 0.6rem; + font-size: 0.82rem; +} + +.dnc-chat-card-damage .chat-note { + font-size: 0.82rem; +} + +.dnc-chat-card-damage-application .chat-pill.success { + background: fade(@color-success, 18%); +} + +.dnc-chat-card-usage { + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.76) 0%, rgba(222, 230, 214, 0.92) 100%), + linear-gradient(135deg, #f6f6ef 0%, #bfcbb1 100%); +} + +.dnc-chat-card-item { + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.8) 0%, rgba(223, 216, 201, 0.92) 100%), + linear-gradient(135deg, #fef9ef 0%, #d1c4aa 100%); +} + +.dnc-chat-card-initiative { + background: + linear-gradient(180deg, rgba(255, 248, 236, 0.82) 0%, rgba(228, 208, 170, 0.94) 100%), + linear-gradient(135deg, #fff8ec 0%, #d7bf85 100%); +} + +.dnc-chat-card-spell { + background: + linear-gradient(180deg, rgba(249, 246, 255, 0.8) 0%, rgba(222, 213, 244, 0.92) 100%), + linear-gradient(135deg, #fcf8ff 0%, #b8abd9 100%); +} + +.dnc-chat-card-chaos { + background: + linear-gradient(180deg, rgba(255, 247, 247, 0.82) 0%, rgba(232, 198, 198, 0.94) 100%), + linear-gradient(135deg, #fff6f2 0%, #d49494 100%); +} + +.dnc-chat-card-favor { + background: + linear-gradient(180deg, rgba(248, 251, 255, 0.8) 0%, rgba(205, 220, 238, 0.94) 100%), + linear-gradient(135deg, #f7fbff 0%, #9fb8d7 100%); +} + +.dnc-chat-card-spell .chat-actions + .chat-actions { + margin-top: @spacing-sm; +} + +.chat-chaos-result { + position: relative; + z-index: 1; + margin-bottom: @spacing-md; + padding: @spacing-sm @spacing-md; + border-radius: @radius-sm; + background: rgba(255, 255, 255, 0.45); + border: 1px solid fade(@color-border, 35%); +} + +.chat-chaos-result-title { + margin: 0 0 0.25rem; + font-weight: 800; +} + +.initiative-header { + margin-bottom: @spacing-lg; +} + +.initiative-header p { + margin: 0.15rem 0 0; + color: @color-muted; +} + +.initiative-total { + min-width: 5.5rem; + border: 2px solid fade(@color-accent, 65%); + border-radius: @radius-md; + background: rgba(255, 255, 255, 0.5); + padding: 0.45rem 0.75rem; + text-align: center; +} + +.initiative-total-label, +.initiative-part-label { + display: block; + font-size: 0.72rem; + letter-spacing: 0.04em; + text-transform: uppercase; + color: @color-muted; +} + +.initiative-total strong { + display: block; + font-size: 1.8rem; + line-height: 1; + color: @color-accent; +} + +.initiative-breakdown { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: @spacing-sm; + margin-bottom: @spacing-md; +} + +.initiative-part { + min-width: 4.5rem; + border-radius: @radius-sm; + background: rgba(255, 255, 255, 0.55); + border: 1px solid fade(@color-border, 40%); + padding: 0.35rem 0.55rem; + text-align: center; +} + +.initiative-part strong, +.initiative-operator { + font-size: 1.1rem; + font-weight: 700; +} + +.initiative-formula { + margin: 0 0 @spacing-md; + font-family: @font-display; + color: @color-muted; +} + +.initiative-sync p { + margin: @spacing-sm 0 0; +} diff --git a/less/components.less b/less/components.less new file mode 100644 index 0000000..f64f92a --- /dev/null +++ b/less/components.less @@ -0,0 +1,49 @@ +.counter-field { + display: flex; + align-items: center; + gap: @spacing-sm; +} + +.counter-field button, +.item-actions button, +.sheet-footer button, +.text-button, +.roll-button { + border: 1px solid @color-border; + border-radius: @radius-sm; + background: linear-gradient(180deg, #fdf9f2 0%, #e8d5ba 100%); + color: @color-ink; + min-height: 2rem; + padding: 0.35rem 0.65rem; +} + +.text-button { + white-space: nowrap; +} + +.roll-button { + width: 2rem; + padding: 0; +} + +.with-controls { + gap: @spacing-sm; +} + +.section-header { + display: flex; + justify-content: space-between; + align-items: center; + gap: @spacing-md; + margin-bottom: @spacing-md; +} + +.empty-state { + margin: 0; + color: @color-muted; + font-style: italic; +} + +.span-two { + grid-column: span 2; +} diff --git a/less/dialogs.less b/less/dialogs.less new file mode 100644 index 0000000..02c9fc1 --- /dev/null +++ b/less/dialogs.less @@ -0,0 +1,36 @@ +.dnc-dialog-form { + display: flex; + flex-direction: column; + gap: @spacing-md; +} + +.dnc-roll-dialog, +.dnc-roll-dialog .window-content, +.dnc-dialog-form, +.dnc-dialog-form p, +.dnc-dialog-form label, +.dnc-dialog-form label > span { + color: @color-ink; +} + +.dnc-dialog-form p { + margin: 0; +} + +.dnc-dialog-form label { + display: flex; + flex-direction: column; + gap: @spacing-sm; + font-weight: 700; +} + +.dnc-dialog-form label > span { + font-size: 0.82rem; + font-weight: 700; + letter-spacing: 0.04em; + text-transform: uppercase; +} + +.dnc-roll-dialog .window-content { + background: linear-gradient(180deg, #f7efe0 0%, #e3d0b1 100%); +} diff --git a/less/donjon-et-cie.less b/less/donjon-et-cie.less new file mode 100644 index 0000000..62ac9e3 --- /dev/null +++ b/less/donjon-et-cie.less @@ -0,0 +1,7 @@ +@import "variables"; +@import "base"; +@import "components"; +@import "actor-sheet"; +@import "item-sheet"; +@import "dialogs"; +@import "chat"; diff --git a/less/item-sheet.less b/less/item-sheet.less new file mode 100644 index 0000000..3994863 --- /dev/null +++ b/less/item-sheet.less @@ -0,0 +1,33 @@ +.application.fvtt-donjon-et-cie.item { + display: flex !important; + flex-direction: column; + padding-top: 0 !important; +} + +.application.fvtt-donjon-et-cie.item > .window-header { + position: relative; + z-index: 2; + width: 100% !important; + flex: 0 0 auto; +} + +.application.fvtt-donjon-et-cie.item > .window-content { + width: 100% !important; + flex: 1 1 auto; + overflow-y: auto !important; + overflow-x: hidden !important; +} + +.application.fvtt-donjon-et-cie.item > .window-content > .dnc-sheet { + min-height: fit-content; +} + +.dnc-item-sheet .identity-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.sheet-footer { + display: flex; + gap: @spacing-md; + justify-content: flex-end; +} diff --git a/less/variables.less b/less/variables.less new file mode 100644 index 0000000..0e5c044 --- /dev/null +++ b/less/variables.less @@ -0,0 +1,27 @@ +@font-face { + font-family: "IM Fell English SC"; + src: url("../assets/fonts/im-fell-english-sc.ttf") format("truetype"); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-body: "Signika", sans-serif; +@font-display: "IM Fell English SC", "Palatino Linotype", "Book Antiqua", Palatino, serif; + +@color-ink: #221b18; +@color-muted: #6d5a4f; +@color-border: #5b4634; +@color-panel: #f1e5d0; +@color-panel-strong: #e2d0b1; +@color-panel-dark: #32261c; +@color-accent: #8b2e17; +@color-success: #2e6b3a; +@color-failure: #842c2c; +@color-shadow: rgba(0, 0, 0, 0.22); + +@spacing-sm: 0.4rem; +@spacing-md: 0.75rem; +@spacing-lg: 1rem; +@radius-sm: 6px; +@radius-md: 10px; diff --git a/modules/applications/donjon-et-cie-roll-dialog.mjs b/modules/applications/donjon-et-cie-roll-dialog.mjs new file mode 100644 index 0000000..da972f8 --- /dev/null +++ b/modules/applications/donjon-et-cie-roll-dialog.mjs @@ -0,0 +1,223 @@ +import { DonjonEtCieRolls } from "../donjon-et-cie-rolls.mjs"; +import { DonjonEtCieUtility } from "../donjon-et-cie-utility.mjs"; + +export class DonjonEtCieRollDialog { + static async createInitiative(actor) { + const content = await foundry.applications.handlebars.renderTemplate( + "systems/fvtt-donjon-et-cie/templates/dialogs/initiative-roll.hbs", + { + actorName: actor.name, + dex: actor.system.caracteristiques?.dexterite?.value ?? 0, + initiativeBonus: actor.system.combat?.initiativeBonus ?? 0 + } + ); + + return foundry.applications.api.DialogV2.wait({ + window: { title: game.i18n.localize("DNC.Roll.Initiative"), icon: "fa-solid fa-bolt" }, + classes: ["dnc-roll-dialog"], + content, + modal: false, + buttons: [ + { + action: "roll", + label: "Lancer", + icon: "fa-solid fa-bolt", + default: true, + callback: async (event, button) => { + const form = button.form.elements; + return DonjonEtCieRolls.rollInitiative(actor, { + mode: form.mode?.value ?? "normal" + }); + } + } + ], + rejectClose: false + }); + } + + static async createCharacteristic(actor, characteristicKey) { + const characteristic = actor.system.caracteristiques?.[characteristicKey]; + if (!characteristic) return; + + const content = await foundry.applications.handlebars.renderTemplate( + "systems/fvtt-donjon-et-cie/templates/dialogs/characteristic-roll.hbs", + { + actorName: actor.name, + characteristic, + characteristicKey, + favorOptions: DonjonEtCieUtility.getAvailableFavorOptions(actor), + hasFavorOptions: DonjonEtCieUtility.getAvailableFavorOptions(actor).length > 0 + } + ); + + return foundry.applications.api.DialogV2.wait({ + window: { title: game.i18n.localize("DNC.Roll.Characteristic"), icon: "fa-solid fa-dice-d20" }, + classes: ["dnc-roll-dialog"], + content, + modal: false, + buttons: [ + { + action: "roll", + label: "Lancer", + icon: "fa-solid fa-dice-d20", + default: true, + callback: async (event, button) => { + const form = button.form.elements; + return DonjonEtCieRolls.rollCharacteristic(actor, characteristicKey, { + mode: form.mode?.value ?? "normal", + favorKey: form.favorDepartment?.value ?? "" + }); + } + } + ], + rejectClose: false + }); + } + + static async createWeapon(actor, item) { + const content = await foundry.applications.handlebars.renderTemplate( + "systems/fvtt-donjon-et-cie/templates/dialogs/weapon-roll.hbs", + { + actorName: actor.name, + item, + characteristicLabel: DonjonEtCieUtility.getWeaponCharacteristicLabel(item.system.categorie), + characteristicValue: actor.system.caracteristiques?.[DonjonEtCieUtility.getWeaponCharacteristicKey(item.system.categorie)]?.value ?? 0, + favorOptions: DonjonEtCieUtility.getAvailableFavorOptions(actor), + hasFavorOptions: DonjonEtCieUtility.getAvailableFavorOptions(actor).length > 0 + } + ); + + return foundry.applications.api.DialogV2.wait({ + window: { title: game.i18n.localize("DNC.Roll.Attack"), icon: "fa-solid fa-sword" }, + classes: ["dnc-roll-dialog"], + content, + modal: false, + buttons: [ + { + action: "roll", + label: "Attaquer", + icon: "fa-solid fa-sword", + default: true, + callback: async (event, button) => { + const form = button.form.elements; + return DonjonEtCieRolls.rollWeapon(actor, item, { + mode: form.mode?.value ?? "normal", + favorKey: form.favorDepartment?.value ?? "" + }); + } + } + ], + rejectClose: false + }); + } + + static async createSpell(actor, item) { + const characteristicKey = item.system.caracteristique || "intelligence"; + const characteristic = actor.system.caracteristiques?.[characteristicKey]; + const magicResources = DonjonEtCieUtility.getMagicResourceContext(actor); + const content = await foundry.applications.handlebars.renderTemplate( + "systems/fvtt-donjon-et-cie/templates/dialogs/spell-roll.hbs", + { + actorName: actor.name, + item, + characteristic, + rank: magicResources.rank, + currentPv: actor.system.sante?.pv?.value ?? 0, + focusLabel: magicResources.focusLabel, + focusDisplay: magicResources.focusDisplay, + focusIsActive: magicResources.focusIsActive, + chaosLabel: magicResources.chaosLabel, + autoDisadvantage: Number(item.system.coutPv ?? 0) > magicResources.rank, + favorOptions: DonjonEtCieUtility.getAvailableFavorOptions(actor), + hasFavorOptions: DonjonEtCieUtility.getAvailableFavorOptions(actor).length > 0 + } + ); + + return foundry.applications.api.DialogV2.wait({ + window: { title: game.i18n.localize("DNC.Roll.Spell"), icon: "fa-solid fa-wand-magic-sparkles" }, + classes: ["dnc-roll-dialog"], + content, + modal: false, + buttons: [ + { + action: "roll", + label: "Lancer", + icon: "fa-solid fa-wand-magic-sparkles", + default: true, + callback: async (event, button) => { + const form = button.form.elements; + return DonjonEtCieRolls.rollSpell(actor, item, { + mode: form.mode?.value ?? "normal", + favorKey: form.favorDepartment?.value ?? "" + }); + } + } + ], + rejectClose: false + }); + } + + static async createUsage(item) { + const content = await foundry.applications.handlebars.renderTemplate( + "systems/fvtt-donjon-et-cie/templates/dialogs/usage-roll.hbs", + { + item + } + ); + + return foundry.applications.api.DialogV2.wait({ + window: { title: game.i18n.localize("DNC.Roll.Usage"), icon: "fa-solid fa-hourglass-half" }, + classes: ["dnc-roll-dialog"], + content, + modal: false, + buttons: [ + { + action: "roll", + label: "Utiliser", + icon: "fa-solid fa-hourglass-half", + default: true, + callback: async (event, button) => { + const form = button.form.elements; + return DonjonEtCieRolls.rollUsage(item, { + mode: form.mode?.value ?? "normal" + }); + } + } + ], + rejectClose: false + }); + } + + static async createDamage(actor, item) { + const content = await foundry.applications.handlebars.renderTemplate( + "systems/fvtt-donjon-et-cie/templates/dialogs/damage-roll.hbs", + { + actorName: actor?.name ?? item.actor?.name ?? "", + item, + actorBonus: actor?.system?.combat?.degatsBonus ?? 0 + } + ); + + return foundry.applications.api.DialogV2.wait({ + window: { title: game.i18n.localize("DNC.Roll.Damage"), icon: "fa-solid fa-burst" }, + classes: ["dnc-roll-dialog"], + content, + modal: false, + buttons: [ + { + action: "roll", + label: "Lancer", + icon: "fa-solid fa-burst", + default: true, + callback: async (event, button) => { + const form = button.form.elements; + return DonjonEtCieRolls.rollDamage(actor, item, { + mode: form.mode?.value ?? "normal" + }); + } + } + ], + rejectClose: false + }); + } +} diff --git a/modules/applications/sheets/_module.mjs b/modules/applications/sheets/_module.mjs new file mode 100644 index 0000000..f97fe7b --- /dev/null +++ b/modules/applications/sheets/_module.mjs @@ -0,0 +1,3 @@ +export { default as DonjonEtCieItemSheet } from "./base-item-sheet.mjs"; +export { default as DonjonEtCieEmployeSheet } from "./donjon-et-cie-employe-sheet.mjs"; +export { default as DonjonEtCiePNJSheet } from "./donjon-et-cie-pnj-sheet.mjs"; diff --git a/modules/applications/sheets/base-actor-sheet.mjs b/modules/applications/sheets/base-actor-sheet.mjs new file mode 100644 index 0000000..4da3bce --- /dev/null +++ b/modules/applications/sheets/base-actor-sheet.mjs @@ -0,0 +1,225 @@ +const { HandlebarsApplicationMixin } = foundry.applications.api; + +export default class DonjonEtCieActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) { + static DEFAULT_OPTIONS = { + classes: ["fvtt-donjon-et-cie", "sheet", "actor"], + position: { width: 920, height: 820 }, + form: { + submitOnChange: true, + closeOnSubmit: false + }, + window: { + resizable: true + }, + dragDrop: [{ dragSelector: ".item-list .item", dropSelector: ".item-dropzone" }], + actions: { + editImage: DonjonEtCieActorSheet.#onEditImage, + setTab: DonjonEtCieActorSheet.#onSetTab, + createItem: DonjonEtCieActorSheet.#onCreateItem, + editItem: DonjonEtCieActorSheet.#onEditItem, + deleteItem: DonjonEtCieActorSheet.#onDeleteItem, + rollHitDice: DonjonEtCieActorSheet.#onRollHitDice, + rollInitiative: DonjonEtCieActorSheet.#onRollInitiative, + rollCharacteristic: DonjonEtCieActorSheet.#onRollCharacteristic, + rollWeapon: DonjonEtCieActorSheet.#onRollWeapon, + rollDamage: DonjonEtCieActorSheet.#onRollDamage, + rollSpell: DonjonEtCieActorSheet.#onRollSpell, + rollUsage: DonjonEtCieActorSheet.#onRollUsage, + useFavorService: DonjonEtCieActorSheet.#onUseFavorService, + postItem: DonjonEtCieActorSheet.#onPostItem, + adjustCounter: DonjonEtCieActorSheet.#onAdjustCounter + } + }; + + async _prepareContext() { + const actor = this.document; + return { + actor, + system: actor.system, + source: actor.toObject(), + config: game.system.donjonEtCie.config, + characteristics: actor.getCharacteristicEntries(), + sections: actor.getSectionData(), + fields: actor.schema.fields, + systemFields: actor.system.schema.fields, + activeTab: this._activeTab ?? "combat" + }; + } + + _onRender(context, options) { + super._onRender(context, options); + this.#fixWindowShell(); + this._applyActiveTab(); + } + + #fixWindowShell() { + const app = this.element?.matches?.(".application") ? this.element : this.element?.closest(".application"); + const content = app?.querySelector(":scope > .window-content") ?? app?.querySelector(".window-content"); + const header = app?.querySelector(".window-header"); + + if (app) { + app.style.display = "flex"; + app.style.flexDirection = "column"; + app.style.paddingTop = "0"; + app.style.overflow = "hidden"; + } + + if (header) { + header.style.width = "100%"; + header.style.flex = "0 0 auto"; + header.style.position = "relative"; + header.style.zIndex = "3"; + } + + if (content) { + content.style.width = "100%"; + content.style.flex = "1 1 auto"; + content.style.minHeight = "0"; + content.style.overflowY = "auto"; + content.style.overflowX = "hidden"; + } + } + + _canDragStart() { + return this.isEditable; + } + + _canDragDrop() { + return this.isEditable; + } + + _onDragStart(event) { + const itemElement = event.currentTarget.closest(".item"); + if (!itemElement) return; + + const itemId = itemElement.dataset.itemId; + const item = this.document.items.get(itemId); + if (!item) return; + + event.dataTransfer.setData("text/plain", JSON.stringify({ type: "Item", uuid: item.uuid })); + } + + _onDragOver(event) { + const dropTarget = event.target.closest(".item-section"); + this.#setDropTarget(dropTarget); + } + + async _onDrop(event) { + this.#setDropTarget(null); + return super._onDrop(event); + } + + #setDropTarget(target) { + this.element.querySelectorAll(".item-section.is-dragover").forEach((section) => section.classList.remove("is-dragover")); + if (target instanceof HTMLElement) { + target.classList.add("is-dragover"); + } + } + + _applyActiveTab() { + const activeTab = this._activeTab ?? "combat"; + this.element.querySelectorAll("[data-tab-button]").forEach((button) => { + const isActive = button.dataset.tab === activeTab; + button.classList.toggle("active", isActive); + button.setAttribute("aria-pressed", isActive ? "true" : "false"); + }); + + this.element.querySelectorAll("[data-tab-panel]").forEach((panel) => { + const isActive = panel.dataset.tabPanel === activeTab; + panel.classList.toggle("active", isActive); + panel.toggleAttribute("hidden", !isActive); + }); + } + + static async #onEditImage(event) { + event.preventDefault(); + const picker = new FilePicker({ + type: "image", + current: this.document.img, + callback: (path) => this.document.update({ img: path }) + }); + return picker.browse(); + } + + static async #onCreateItem(event, target) { + event.preventDefault(); + const type = target.dataset.type; + if (!type) return; + return this.document.createEmbeddedDocuments("Item", [{ name: `Nouveau ${type}`, type }], { renderSheet: true }); + } + + static async #onSetTab(event, target) { + event.preventDefault(); + const tab = target.dataset.tab; + if (!tab) return; + this._activeTab = tab; + this._applyActiveTab(); + } + + static async #onEditItem(event, target) { + event.preventDefault(); + const item = this.document.items.get(target.closest("[data-item-id]")?.dataset.itemId); + return item?.sheet.render(true); + } + + static async #onDeleteItem(event, target) { + event.preventDefault(); + const itemId = target.closest("[data-item-id]")?.dataset.itemId; + if (!itemId) return; + return this.document.deleteEmbeddedDocuments("Item", [itemId]); + } + + static async #onRollCharacteristic(event, target) { + event.preventDefault(); + return this.document.rollCharacteristic(target.dataset.characteristic); + } + + static async #onRollInitiative(event) { + event.preventDefault(); + return this.document.rollInitiative(); + } + + static async #onRollHitDice(event) { + event.preventDefault(); + return this.document.rollHitDice(); + } + + static async #onRollWeapon(event, target) { + event.preventDefault(); + return this.document.rollWeapon(target.closest("[data-item-id]")?.dataset.itemId); + } + + static async #onRollDamage(event, target) { + event.preventDefault(); + return this.document.rollDamage(target.closest("[data-item-id]")?.dataset.itemId); + } + + static async #onRollSpell(event, target) { + event.preventDefault(); + return this.document.rollSpell(target.closest("[data-item-id]")?.dataset.itemId); + } + + static async #onRollUsage(event, target) { + event.preventDefault(); + return this.document.rollUsage(target.closest("[data-item-id]")?.dataset.itemId); + } + + static async #onUseFavorService(event, target) { + event.preventDefault(); + return this.document.useFavorService(target.dataset.department); + } + + static async #onPostItem(event, target) { + event.preventDefault(); + const item = this.document.items.get(target.closest("[data-item-id]")?.dataset.itemId); + return item?.postToChat(); + } + + static async #onAdjustCounter(event, target) { + event.preventDefault(); + const path = target.dataset.path; + const delta = Number(target.dataset.delta ?? 0); + if (!path || Number.isNaN(delta)) return; + return this.document.adjustNumericField(path, delta); + } +} diff --git a/modules/applications/sheets/base-item-sheet.mjs b/modules/applications/sheets/base-item-sheet.mjs new file mode 100644 index 0000000..34cdd25 --- /dev/null +++ b/modules/applications/sheets/base-item-sheet.mjs @@ -0,0 +1,110 @@ +import { DonjonEtCieUtility } from "../../donjon-et-cie-utility.mjs"; + +const { HandlebarsApplicationMixin } = foundry.applications.api; + +export default class DonjonEtCieItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) { + static DEFAULT_OPTIONS = { + classes: ["fvtt-donjon-et-cie", "sheet", "item"], + position: { width: 640, height: 700 }, + form: { + submitOnChange: true, + closeOnSubmit: false + }, + window: { + resizable: true + }, + actions: { + editImage: DonjonEtCieItemSheet.#onEditImage, + postItem: DonjonEtCieItemSheet.#onPostItem, + rollItem: DonjonEtCieItemSheet.#onRollItem, + rollDamageItem: DonjonEtCieItemSheet.#onRollDamageItem + } + }; + + static PARTS = { + main: { template: "systems/fvtt-donjon-et-cie/templates/items/item-sheet.hbs" } + }; + + async _prepareContext() { + const item = this.document; + return { + item, + system: item.system, + source: item.toObject(), + config: game.system.donjonEtCie.config, + fields: item.schema.fields, + systemFields: item.system.schema.fields, + isWeapon: item.type === "arme", + isArmor: item.type === "armure", + isConsumable: item.type === "consommable", + isSpell: item.type === "sortilege", + canRollDamage: Boolean(item.system.degats), + isEquipment: item.type === "equipement", + isCapacity: item.type === "capacite", + isLanguage: item.type === "langue", + isTrait: item.type === "trait", + armorProtectionDisplay: Number(item.system.resultatProtection ?? 0) > 0 ? item.system.resultatProtection : "—", + weaponCharacteristicLabel: item.type === "arme" ? DonjonEtCieUtility.getWeaponCharacteristicLabel(item.system.categorie) : null, + enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(item.system.description ?? "", { async: true }), + enrichedNotes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(item.system.notes ?? "", { async: true }) + }; + } + + _onRender(context, options) { + super._onRender(context, options); + this.#fixWindowShell(); + } + + #fixWindowShell() { + const content = this.element?.closest(".window-content") ?? this.element?.parentElement; + const app = content?.closest(".application") ?? this.element?.closest(".application"); + const header = app?.querySelector(".window-header"); + + if (app) { + app.style.display = "flex"; + app.style.flexDirection = "column"; + app.style.paddingTop = "0"; + app.style.overflow = "hidden"; + } + + if (header) { + header.style.width = "100%"; + header.style.flex = "0 0 auto"; + header.style.position = "relative"; + header.style.zIndex = "3"; + } + + if (content) { + content.style.width = "100%"; + content.style.flex = "1 1 auto"; + content.style.minHeight = "0"; + content.style.overflowY = "auto"; + content.style.overflowX = "hidden"; + } + } + + static async #onEditImage(event) { + event.preventDefault(); + const picker = new FilePicker({ + type: "image", + current: this.document.img, + callback: (path) => this.document.update({ img: path }) + }); + return picker.browse(); + } + + static async #onPostItem(event) { + event.preventDefault(); + return this.document.postToChat(); + } + + static async #onRollItem(event) { + event.preventDefault(); + return this.document.roll(); + } + + static async #onRollDamageItem(event) { + event.preventDefault(); + return this.document.rollDamage(); + } +} diff --git a/modules/applications/sheets/donjon-et-cie-employe-sheet.mjs b/modules/applications/sheets/donjon-et-cie-employe-sheet.mjs new file mode 100644 index 0000000..c91c0fe --- /dev/null +++ b/modules/applications/sheets/donjon-et-cie-employe-sheet.mjs @@ -0,0 +1,37 @@ +import DonjonEtCieActorSheet from "./base-actor-sheet.mjs"; +import { DonjonEtCieUtility } from "../../donjon-et-cie-utility.mjs"; + +export default class DonjonEtCieEmployeSheet extends DonjonEtCieActorSheet { + static DEFAULT_OPTIONS = { + ...super.DEFAULT_OPTIONS, + classes: [...super.DEFAULT_OPTIONS.classes, "employe"], + position: { width: 980, height: 860 } + }; + + static PARTS = { + main: { template: "systems/fvtt-donjon-et-cie/templates/actors/employe-sheet.hbs" } + }; + + async _prepareContext() { + const context = await super._prepareContext(); + const indexedSections = Object.fromEntries(context.sections.map((section) => [section.key, section])); + const getSection = (key) => indexedSections[key] ?? { + key, + label: context.config.actorSections[key]?.label ?? key, + createType: context.config.actorSections[key]?.createType ?? key, + items: [] + }; + + return { + ...context, + magicResources: DonjonEtCieUtility.getMagicResourceContext(this.document), + favorEntries: this.document.getFavorEntries(), + chaosTable: DonjonEtCieUtility.getChaosTableEntries(), + traitsSection: getSection("traits"), + combatSections: ["armes", "armures", "consommables", "equipements"].map(getSection), + spellSection: getSection("sortileges"), + capacitySection: getSection("capacites"), + profileSections: ["langues"].map(getSection) + }; + } +} diff --git a/modules/applications/sheets/donjon-et-cie-pnj-sheet.mjs b/modules/applications/sheets/donjon-et-cie-pnj-sheet.mjs new file mode 100644 index 0000000..d95143a --- /dev/null +++ b/modules/applications/sheets/donjon-et-cie-pnj-sheet.mjs @@ -0,0 +1,57 @@ +import DonjonEtCieActorSheet from "./base-actor-sheet.mjs"; +import { DonjonEtCieUtility } from "../../donjon-et-cie-utility.mjs"; + +export default class DonjonEtCiePNJSheet extends DonjonEtCieActorSheet { + static DEFAULT_OPTIONS = { + ...super.DEFAULT_OPTIONS, + classes: [...super.DEFAULT_OPTIONS.classes, "pnj"], + position: { width: 840, height: 760 }, + actions: { + ...super.DEFAULT_OPTIONS.actions, + rollPnjArmor: DonjonEtCiePNJSheet.#onRollPnjArmor, + rollPnjCourage: DonjonEtCiePNJSheet.#onRollPnjCourage, + rollPnjAttackDamage: DonjonEtCiePNJSheet.#onRollPnjAttackDamage + } + }; + + static PARTS = { + main: { template: "systems/fvtt-donjon-et-cie/templates/actors/pnj-sheet.hbs" } + }; + + async _prepareContext() { + const context = await super._prepareContext(); + const system = this.document.system; + const indexedSections = Object.fromEntries(context.sections.map((section) => [section.key, section])); + const getSection = (key) => indexedSections[key] ?? { + key, + label: context.config.actorSections[key]?.label ?? key, + createType: context.config.actorSections[key]?.createType ?? key, + items: [] + }; + + return { + ...context, + capacitySection: getSection("capacites"), + spellSection: getSection("sortileges"), + armorDisplay: Number(system.defense?.armure?.delta ?? 0) ? `Δ${system.defense.armure.delta}` : "—", + storedArmor: Number(system.defense?.armure?.resultatProtection ?? 0) > 0 ? system.defense.armure.resultatProtection : "—", + courageDisplay: Number(system.defense?.courage?.delta ?? 0) ? `Δ${system.defense.courage.delta}` : "—", + hasAttackDamage: Boolean(system.attaque?.degats) + }; + } + + static async #onRollPnjArmor(event) { + event.preventDefault(); + return this.document.rollPnjArmor(); + } + + static async #onRollPnjCourage(event) { + event.preventDefault(); + return this.document.rollPnjCourage(); + } + + static async #onRollPnjAttackDamage(event) { + event.preventDefault(); + return this.document.rollPnjAttackDamage(); + } +} diff --git a/modules/donjon-et-cie-actor.mjs b/modules/donjon-et-cie-actor.mjs new file mode 100644 index 0000000..c2db7e1 --- /dev/null +++ b/modules/donjon-et-cie-actor.mjs @@ -0,0 +1,203 @@ +import { DonjonEtCieUtility } from "./donjon-et-cie-utility.mjs"; +import { DonjonEtCieRollDialog } from "./applications/donjon-et-cie-roll-dialog.mjs"; + +export class DonjonEtCieActor extends Actor { + prepareDerivedData() { + super.prepareDerivedData(); + + const pv = this.system.sante?.pv; + if (pv && pv.value > pv.max) { + pv.max = pv.value; + } + } + + getCharacteristicEntries() { + return DonjonEtCieUtility.getCharacteristicEntries(this.system); + } + + getSectionData() { + return DonjonEtCieUtility.buildActorSections(this); + } + + getFavorEntries() { + return DonjonEtCieUtility.getFavorEntries(this.system); + } + + #getStoredArmorContext() { + if (this.type === "pnj") { + const stored = Number(this.system.defense?.armure?.resultatProtection ?? 0); + return { + label: "ARM", + hasArmor: true, + before: stored, + update: async (value) => this.update({ "system.defense.armure.resultatProtection": Math.max(0, Number(value ?? 0)) }) + }; + } + + const armors = [...this.items.filter((item) => item.type === "armure")].sort((a, b) => { + const equippedScore = Number(Boolean(b.system.equipee)) - Number(Boolean(a.system.equipee)); + if (equippedScore) return equippedScore; + + const protectionScore = Number(b.system.resultatProtection ?? 0) - Number(a.system.resultatProtection ?? 0); + if (protectionScore) return protectionScore; + + return a.name.localeCompare(b.name, "fr", { sensitivity: "base" }); + }); + + const armor = armors.find((item) => item.system.equipee || Number(item.system.resultatProtection ?? 0) > 0) ?? null; + if (!armor) { + return { + label: "Armure", + hasArmor: false, + before: 0, + update: null + }; + } + + return { + label: armor.name, + hasArmor: true, + before: Number(armor.system.resultatProtection ?? 0), + update: async (value) => armor.update({ "system.resultatProtection": Math.max(0, Number(value ?? 0)) }) + }; + } + + async adjustNumericField(path, delta) { + const current = Number(foundry.utils.getProperty(this, path) ?? 0); + let next = current + Number(delta); + + if (path === "system.sante.pv.value") { + const max = Number(this.system.sante?.pv?.max ?? next); + next = Math.max(0, Math.min(next, max)); + } else { + next = Math.max(0, next); + } + + return this.update({ [path]: next }); + } + + async applyIncomingDamage(damage, { useArmor = false } = {}) { + const incoming = Math.max(0, Number(damage ?? 0)); + const pvBefore = Number(this.system.sante?.pv?.value ?? 0); + const pvMax = Number(this.system.sante?.pv?.max ?? pvBefore); + const armor = this.#getStoredArmorContext(); + const armorBefore = useArmor ? Number(armor.before ?? 0) : 0; + const armorAbsorbed = Math.min(incoming, armorBefore); + const armorAfter = Math.max(armorBefore - armorAbsorbed, 0); + const hpDamage = Math.max(incoming - armorAbsorbed, 0); + const pvAfter = Math.max(pvBefore - hpDamage, 0); + + if (useArmor && armor.hasArmor && armor.update && armorAfter !== armorBefore) { + await armor.update(armorAfter); + } + + if (hpDamage !== 0) { + await this.update({ "system.sante.pv.value": pvAfter }); + } + + return { + incoming, + useArmor, + armorLabel: armor.label, + armorAvailable: armor.hasArmor, + armorBefore, + armorAbsorbed, + armorAfter, + hpDamage, + pvBefore, + pvAfter, + pvMax + }; + } + + async rollCharacteristic(key) { + return DonjonEtCieRollDialog.createCharacteristic(this, key); + } + + async useFavorService(departmentKey) { + return game.system.donjonEtCie.rolls.useFavorService(this, departmentKey); + } + + async rollInitiative() { + return DonjonEtCieRollDialog.createInitiative(this); + } + + async rollHitDice() { + return game.system.donjonEtCie.rolls.rollHitDice(this); + } + + async rollWeapon(itemId) { + const item = this.items.get(itemId); + if (item) return DonjonEtCieRollDialog.createWeapon(this, item); + } + + async rollDamage(itemId) { + const item = this.items.get(itemId); + if (item) return DonjonEtCieRollDialog.createDamage(this, item); + } + + async rollSpell(itemId) { + const item = this.items.get(itemId); + if (item) return DonjonEtCieRollDialog.createSpell(this, item); + } + + async rollUsage(itemId) { + const item = this.items.get(itemId); + if (item) return DonjonEtCieRollDialog.createUsage(item); + } + + #createPnjResourceProxy({ label, deltaPath, protectionPath = null }) { + const delta = Number(foundry.utils.getProperty(this, deltaPath) ?? 0); + const protection = protectionPath ? Number(foundry.utils.getProperty(this, protectionPath) ?? 0) : 0; + + return { + actor: this, + type: protectionPath ? "armure" : "ressource", + name: `${this.name} · ${label}`, + system: { + delta, + resultatProtection: protection + }, + update: async (data) => { + const updateData = {}; + if (Object.hasOwn(data, "system.delta")) { + updateData[deltaPath] = data["system.delta"]; + } + if (protectionPath && Object.hasOwn(data, "system.resultatProtection")) { + updateData[protectionPath] = data["system.resultatProtection"]; + } + return Object.keys(updateData).length ? this.update(updateData) : this; + } + }; + } + + async rollPnjArmor() { + return DonjonEtCieRollDialog.createUsage(this.#createPnjResourceProxy({ + label: "ARM", + deltaPath: "system.defense.armure.delta", + protectionPath: "system.defense.armure.resultatProtection" + })); + } + + async rollPnjCourage() { + return DonjonEtCieRollDialog.createUsage(this.#createPnjResourceProxy({ + label: "COU", + deltaPath: "system.defense.courage.delta" + })); + } + + async rollPnjAttackDamage() { + const attackName = this.system.attaque?.nom || "Attaque"; + const attackDamage = this.system.attaque?.degats || ""; + if (!attackDamage) return null; + + return DonjonEtCieRollDialog.createDamage(this, { + name: `${this.name} · ${attackName}`, + type: "attaque", + system: { + degats: attackDamage, + portee: this.system.attaque?.notes || "" + } + }); + } +} diff --git a/modules/donjon-et-cie-config.mjs b/modules/donjon-et-cie-config.mjs new file mode 100644 index 0000000..296b82c --- /dev/null +++ b/modules/donjon-et-cie-config.mjs @@ -0,0 +1,117 @@ +export const DONJON_ET_CIE = { + id: "fvtt-donjon-et-cie", + characteristics: { + force: { label: "FORce", short: "FOR" }, + dexterite: { label: "DEXterite", short: "DEX" }, + constitution: { label: "CONstitution", short: "CON" }, + intelligence: { label: "INTelligence", short: "INT" }, + sagesse: { label: "SAGesse", short: "SAG" }, + charisme: { label: "CHArisme", short: "CHA" } + }, + characteristicOptions: { + force: "FORce", + dexterite: "DEXterite", + constitution: "CONstitution", + intelligence: "INTelligence", + sagesse: "SAGesse", + charisme: "CHArisme" + }, + usageDieOptions: { + 0: "Aucun", + 4: "Δ4", + 6: "Δ6", + 8: "Δ8", + 10: "Δ10", + 12: "Δ12" + }, + favorDepartments: { + entreesSorties: "Entrees et Sorties", + relationsMecenes: "Relations Mecenes", + relationsInterieures: "Relations Interieures", + conception: "Conception", + materiel: "Materiel", + arpentage: "Arpentage", + terminaison: "Terminaison", + recrutement: "Recrutement", + reception: "Reception", + conditionnement: "Conditionnement", + supervision: "Supervision", + exploration: "Exploration", + reclame: "Reclame", + entretien: "Entretien" + }, + chaosTable: { + 1: { + title: "Erreur", + effect: "L'effet du sort est inverse ou transforme de maniere dramatique." + }, + 2: { + title: "Mutation", + effect: "La magie fonctionne, mais transforme le personnage et laisse des sequelles : deformation, cicatrice, etc." + }, + 3: { + title: "Oubli", + effect: "Le sort fonctionne, mais le personnage l'oublie et ne s'en souviendra qu'apres une bonne nuit de sommeil." + }, + 4: { + title: "Drain", + effect: "Le personnage perd un nombre de points egal au cout du sort dans une caracteristique determinee au hasard. Ces points se recuperent au rythme d'un par jour." + }, + 5: { + title: "Feu d'artifice", + effect: "Du bruit, de la lumiere, aucun effet tangible, sinon que les vetements du magicien prennent certainement feu." + }, + 6: { + title: "Pic de pouvoir", + effect: "Aucune magie ne prend effet, mais le personnage regagne les points de vie depenses pour le sort." + }, + 7: { + title: "Sort amoindri", + effect: "La zone d'effet, le nombre de cibles, les dommages, tout est divise par deux." + }, + 8: { + title: "Absence de controle", + effect: "Votre magie a un effet secondaire negatif." + }, + 9: { + title: "Fuite de pouvoir", + effect: "Le sort fonctionne mais coute le double de son cout en PV (en tout). Si le personnage tombe a 0 PV, il perd connaissance." + }, + 10: { + title: "Effet retarde", + effect: "La magie prend effet normalement... mais dans d4 tours." + }, + 11: { + title: "Mal vise", + effect: "Le sort affecte une autre cible que celle que vous visez, au choix du MJ." + }, + 12: { + title: "BAM !", + effect: "Les effets, nombre de cibles ou taille du sort sont doubles." + } + }, + weaponCategoryOptions: { + melee: "Corps a corps", + distance: "Distance" + }, + actorSections: { + traits: { label: "Traits", createType: "trait" }, + langues: { label: "Langues", createType: "langue" }, + capacites: { label: "Capacites", createType: "capacite" }, + sortileges: { label: "Sortileges", createType: "sortilege" }, + armes: { label: "Armes", createType: "arme" }, + armures: { label: "Armures", createType: "armure" }, + equipements: { label: "Equipements", createType: "equipement" }, + consommables: { label: "Consommables", createType: "consommable" } + }, + sectionTypes: { + traits: ["trait"], + langues: ["langue"], + capacites: ["capacite"], + sortileges: ["sortilege"], + armes: ["arme"], + armures: ["armure"], + equipements: ["equipement"], + consommables: ["consommable"] + } +}; diff --git a/modules/donjon-et-cie-item.mjs b/modules/donjon-et-cie-item.mjs new file mode 100644 index 0000000..b156924 --- /dev/null +++ b/modules/donjon-et-cie-item.mjs @@ -0,0 +1,45 @@ +import { DonjonEtCieRollDialog } from "./applications/donjon-et-cie-roll-dialog.mjs"; +import { DonjonEtCieUtility } from "./donjon-et-cie-utility.mjs"; + +export class DonjonEtCieItem extends Item { + async _preCreate(data, options, user) { + await super._preCreate(data, options, user); + + const currentImg = data.img ?? this.img; + if (currentImg && !currentImg.startsWith("icons/svg/")) return; + + this.updateSource({ img: DonjonEtCieUtility.getDefaultItemIcon(this.type) }); + } + + get usageDie() { + return Number(this.system.delta ?? 0); + } + + async roll() { + if (this.type === "arme") return DonjonEtCieRollDialog.createWeapon(this.actor, this); + if (this.type === "sortilege") return DonjonEtCieRollDialog.createSpell(this.actor, this); + if (this.usageDie) return DonjonEtCieRollDialog.createUsage(this); + return this.postToChat(); + } + + async rollDamage() { + if (!this.system.degats) return null; + return DonjonEtCieRollDialog.createDamage(this.actor, this); + } + + async postToChat() { + const content = await foundry.applications.handlebars.renderTemplate( + "systems/fvtt-donjon-et-cie/templates/chat/item-card.hbs", + { + item: this, + usageLabel: DonjonEtCieUtility.formatUsageDie(this.usageDie) + } + ); + + return ChatMessage.create({ + speaker: ChatMessage.getSpeaker({ actor: this.actor }), + user: game.user.id, + content + }); + } +} diff --git a/modules/donjon-et-cie-main.mjs b/modules/donjon-et-cie-main.mjs new file mode 100644 index 0000000..527eb97 --- /dev/null +++ b/modules/donjon-et-cie-main.mjs @@ -0,0 +1,103 @@ +import { DONJON_ET_CIE } from "./donjon-et-cie-config.mjs"; +import { DonjonEtCieUtility } from "./donjon-et-cie-utility.mjs"; +import { DonjonEtCieActor } from "./donjon-et-cie-actor.mjs"; +import { DonjonEtCieItem } from "./donjon-et-cie-item.mjs"; +import * as models from "./models/index.mjs"; +import * as sheets from "./applications/sheets/_module.mjs"; +import { DonjonEtCieRollDialog } from "./applications/donjon-et-cie-roll-dialog.mjs"; +import { DonjonEtCieRolls } from "./donjon-et-cie-rolls.mjs"; + +function onChatActionClick(event) { + const button = event.target.closest("[data-action='rollChatDamage'], [data-action='rollSpellChaos'], [data-action='applyDamage']"); + if (!(button instanceof HTMLElement)) return; + + event.preventDefault(); + + void (async () => { + if (button.dataset.action === "rollSpellChaos") { + const actorUuid = button.dataset.actorUuid; + const itemUuid = button.dataset.itemUuid; + if (!actorUuid || !itemUuid) return; + const [actor, item] = await Promise.all([fromUuid(actorUuid), fromUuid(itemUuid)]); + return DonjonEtCieRolls.rollSpellChaos(actor, item); + } + + if (button.dataset.action === "applyDamage") { + const card = button.closest(".dnc-chat-card-damage"); + const select = card?.querySelector("[data-role='damage-target']"); + const targetUuid = select instanceof HTMLSelectElement ? select.value : ""; + if (!targetUuid) { + ui.notifications.warn(game.i18n.localize("DNC.Chat.SelectTarget")); + return null; + } + + const target = await fromUuid(targetUuid); + if (!target) { + ui.notifications.warn(game.i18n.localize("DNC.Chat.TargetUnavailable")); + return null; + } + + return DonjonEtCieRolls.applyDamage(target, { + damage: Number(button.dataset.damage ?? 0), + useArmor: button.dataset.useArmor === "true", + sourceLabel: button.dataset.sourceLabel ?? "" + }); + } + + const itemUuid = button.dataset.itemUuid; + if (!itemUuid) return; + const item = await fromUuid(itemUuid); + return item?.rollDamage?.(); + })(); +} + +Hooks.once("init", async () => { + console.log("Initialisation du systeme Donjon & Cie"); + + await DonjonEtCieUtility.preloadHandlebarsTemplates(); + + CONFIG.Combat.initiative = { + formula: "1d20 + @system.caracteristiques.dexterite.value + @system.combat.initiativeBonus", + decimals: 0 + }; + + CONFIG.Actor.documentClass = DonjonEtCieActor; + CONFIG.Actor.dataModels = { + employe: models.EmployeDataModel, + pnj: models.PnjDataModel + }; + + CONFIG.Item.documentClass = DonjonEtCieItem; + CONFIG.Item.dataModels = { + trait: models.TraitDataModel, + langue: models.LangueDataModel, + capacite: models.CapaciteDataModel, + sortilege: models.SortilegeDataModel, + arme: models.ArmeDataModel, + armure: models.ArmureDataModel, + equipement: models.EquipementDataModel, + consommable: models.ConsommableDataModel + }; + + game.system.donjonEtCie = { + config: DONJON_ET_CIE, + models, + sheets, + rolls: DonjonEtCieRolls, + dialogs: DonjonEtCieRollDialog, + utility: DonjonEtCieUtility + }; + + foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet); + foundry.documents.collections.Actors.registerSheet("fvtt-donjon-et-cie", sheets.DonjonEtCieEmployeSheet, { types: ["employe"], makeDefault: true }); + foundry.documents.collections.Actors.registerSheet("fvtt-donjon-et-cie", sheets.DonjonEtCiePNJSheet, { types: ["pnj"], makeDefault: true }); + + foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet); + for (const type of ["trait", "langue", "capacite", "sortilege", "arme", "armure", "equipement", "consommable"]) { + foundry.documents.collections.Items.registerSheet("fvtt-donjon-et-cie", sheets.DonjonEtCieItemSheet, { types: [type], makeDefault: true }); + } +}); + +Hooks.once("ready", () => { + document.addEventListener("click", onChatActionClick); +}); diff --git a/modules/donjon-et-cie-rolls.mjs b/modules/donjon-et-cie-rolls.mjs new file mode 100644 index 0000000..24bc8a3 --- /dev/null +++ b/modules/donjon-et-cie-rolls.mjs @@ -0,0 +1,546 @@ +import { DonjonEtCieUtility } from "./donjon-et-cie-utility.mjs"; +import { DONJON_ET_CIE } from "./donjon-et-cie-config.mjs"; + +export class DonjonEtCieRolls { + static async #createChatCard(actor, template, context) { + const content = await foundry.applications.handlebars.renderTemplate(template, context); + await ChatMessage.create({ + speaker: ChatMessage.getSpeaker({ actor }), + user: game.user.id, + content + }); + } + + static #selectKeptValue(values, mode, favorable = "low") { + if (!values.length) return null; + if (mode === "normal") return values[0]; + + const selector = favorable === "low" + ? (mode === "avantage" ? Math.min : Math.max) + : (mode === "avantage" ? Math.max : Math.min); + + return selector(...values); + } + + static #getModeLabel(mode) { + if (mode === "avantage") return "Avantage"; + if (mode === "desavantage") return "Desavantage"; + return null; + } + + static #applyFavorMode(mode) { + if (mode === "desavantage") return "normal"; + return "avantage"; + } + + static async #resolveFormulaRoll(formula, data = {}, { mode = "normal", favorable = "high" } = {}) { + const rollCount = mode === "normal" ? 1 : 2; + const rolls = await Promise.all(Array.from({ length: rollCount }, () => (new Roll(formula, data)).evaluate())); + const values = rolls.map((roll) => roll.total); + const kept = this.#selectKeptValue(values, mode, favorable); + const keptIndex = Math.max(0, values.findIndex((value) => value === kept)); + const keptRoll = rolls[keptIndex] ?? rolls[0]; + + return { rolls, values, kept, keptIndex, keptRoll, mode, formula: keptRoll.formula }; + } + + static async #resolveCharacteristic(actor, characteristicKey, { mode = "normal" } = {}) { + const characteristic = actor.system.caracteristiques?.[characteristicKey]; + if (!characteristic) return null; + + const target = Number(characteristic.value ?? 0); + const rollCount = mode === "normal" ? 1 : 2; + const roll = await (new Roll(`${rollCount}d20`)).evaluate(); + const values = roll.dice[0]?.results?.map((result) => result.result) ?? []; + const kept = this.#selectKeptValue(values, mode, "low"); + const success = kept <= target; + + return { characteristic, characteristicKey, target, values, kept, success, mode, isNaturalOne: kept === 1, isNaturalTwenty: kept === 20 }; + } + + static async #resolveFavorBoost(actor, favorKey, mode = "normal") { + if (!favorKey) return null; + + const label = DonjonEtCieUtility.getFavorLabel(favorKey); + const path = `system.faveurs.${favorKey}.delta`; + const before = Number(foundry.utils.getProperty(actor, path) ?? 0); + if (!before) { + ui.notifications.warn(`Aucune faveur disponible pour ${label}.`); + return null; + } + + const resolved = await this.#resolveFormulaRoll(`1d${before}`, {}, { favorable: "high" }); + const result = resolved.kept; + const degraded = result <= 3; + const after = degraded ? DonjonEtCieUtility.degradeUsageDie(before) : before; + if (after !== before) { + await actor.update({ [path]: after }); + } + + return { + key: favorKey, + label, + before, + after, + result, + degraded, + stable: !degraded, + effectiveMode: this.#applyFavorMode(mode), + modeBefore: mode, + modeAfter: this.#applyFavorMode(mode), + note: degraded + ? "Le coup de pouce reste anonyme : un collegue du departement a donne l'info utile." + : "Le coup de pouce tient bon : nommez le collegue, ses trois traits et la relation pour le trombinoscope." + }; + } + + static async useFavorService(actor, favorKey) { + if (!favorKey) return null; + + const label = DonjonEtCieUtility.getFavorLabel(favorKey); + const path = `system.faveurs.${favorKey}.delta`; + const before = Number(foundry.utils.getProperty(actor, path) ?? 0); + if (!before) { + ui.notifications.warn(`Aucune faveur disponible pour ${label}.`); + return null; + } + + const after = DonjonEtCieUtility.degradeUsageDie(before); + await actor.update({ [path]: after }); + + await this.#createChatCard(actor, "systems/fvtt-donjon-et-cie/templates/chat/favor-card.hbs", { + title: game.i18n.localize("DNC.Roll.Favor"), + subtitle: label, + kindLabel: "Service", + before: DonjonEtCieUtility.formatUsageDie(before), + after: DonjonEtCieUtility.formatUsageDie(after), + autoSpent: true, + note: "La faveur est brulee pour obtenir directement l'aide souhaitee, a la discretion du MJ." + }); + + return { key: favorKey, label, before, after }; + } + + static async #ensureFocus(actor) { + const focusDelta = Number(actor.system.magie?.focus?.delta ?? 0); + const focusResult = Number(actor.system.magie?.focus?.resultat ?? 0); + const focusSceneId = actor.system.magie?.focus?.sceneId ?? ""; + const currentSceneId = DonjonEtCieUtility.getCurrentSceneId(); + const sameScene = focusSceneId === currentSceneId; + const activeFocus = sameScene ? focusResult : 0; + + if (!focusDelta) { + return { delta: 0, activeValue: 0, rolled: false, before: 0, after: 0, degraded: false }; + } + + if (sameScene) { + return { delta: focusDelta, activeValue: activeFocus, rolled: false, before: focusDelta, after: focusDelta, degraded: false }; + } + + const resolved = await this.#resolveFormulaRoll(`1d${focusDelta}`, {}, { favorable: "high" }); + const result = resolved.kept; + const degraded = result <= 3; + const after = degraded ? DonjonEtCieUtility.degradeUsageDie(focusDelta) : focusDelta; + const updateData = { + "system.magie.focus.resultat": result, + "system.magie.focus.sceneId": currentSceneId + }; + + if (after !== focusDelta) { + updateData["system.magie.focus.delta"] = after; + } + + await actor.update(updateData); + + return { + delta: after, + activeValue: result, + rolled: true, + before: focusDelta, + after, + degraded, + values: resolved.values + }; + } + + static async rollCharacteristic(actor, characteristicKey, { mode = "normal", label = null, favorKey = "" } = {}) { + const favor = await this.#resolveFavorBoost(actor, favorKey, mode); + const effectiveMode = favor?.effectiveMode ?? mode; + const result = await this.#resolveCharacteristic(actor, characteristicKey, { mode: effectiveMode }); + if (!result) return null; + + await this.#createChatCard(actor, "systems/fvtt-donjon-et-cie/templates/chat/roll-card.hbs", { + title: label ?? "Jet de caracteristique", + subtitle: result.characteristic.label, + formula: result.values.length > 1 ? "2d20" : "1d20", + mode: effectiveMode, + modeLabel: this.#getModeLabel(effectiveMode), + target: result.target, + targetPillLabel: "Cible", + targetPillValue: result.target, + values: result.values, + kept: result.kept, + keptPillLabel: "Garde", + keptPillValue: result.kept, + success: result.success, + favorLabel: favor?.label ?? null, + favorNote: favor?.note ?? null, + details: [ + { label: "Caracteristique", value: result.characteristic.label }, + { label: "Valeur cible", value: result.target }, + ...(favor ? [ + { label: "Faveur", value: favor.label }, + { label: "Dé de faveur", value: favor.result }, + { label: "Avant", value: DonjonEtCieUtility.formatUsageDie(favor.before) }, + { label: "Apres", value: DonjonEtCieUtility.formatUsageDie(favor.after) } + ] : []) + ] + }); + + return { ...result, favor, mode: effectiveMode }; + } + + static async rollInitiative(actor, { mode = "normal" } = {}) { + const dex = Number(actor.system.caracteristiques?.dexterite?.value ?? 0); + const sheetBonus = Number(actor.system.combat?.initiativeBonus ?? 0); + const result = await this.#resolveFormulaRoll("1d20 + @dex + @sheetBonus", { dex, sheetBonus }, { mode, favorable: "high" }); + const dieValues = result.rolls.map((roll) => roll.dice[0]?.results?.[0]?.result ?? roll.total); + const die = dieValues[result.keptIndex] ?? dieValues[0] ?? result.kept; + + let syncedCombat = null; + const activeCombat = game.combats?.contents?.find((combat) => combat.active); + const combatant = activeCombat?.combatants?.find((entry) => entry.actorId === actor.id); + if (combatant) { + await activeCombat.setInitiative(combatant.id, result.kept); + const ordered = [...activeCombat.combatants].sort((a, b) => (b.initiative ?? -Infinity) - (a.initiative ?? -Infinity)); + syncedCombat = { + name: activeCombat.name, + initiative: result.kept, + rank: ordered.findIndex((entry) => entry.id === combatant.id) + 1, + total: ordered.length + }; + } + + await this.#createChatCard(actor, "systems/fvtt-donjon-et-cie/templates/chat/initiative-card.hbs", { + title: game.i18n.localize("DNC.Roll.Initiative"), + actorName: actor.name, + total: result.kept, + formula: result.rolls.length > 1 ? `2 × ${result.formula}` : result.formula, + die, + dieValues, + dex, + bonus: sheetBonus, + mode: result.mode, + modeLabel: this.#getModeLabel(result.mode), + syncedCombat + }); + + return { total: result.kept, die, dieValues, dex, bonus: sheetBonus, mode: result.mode, syncedCombat }; + } + + static async rollHitDice(actor) { + const formula = String(actor.system.sante?.dv ?? "").trim(); + if (!formula) return null; + + let roll; + try { + roll = await (new Roll(formula)).evaluate(); + } catch (error) { + ui.notifications.error(`Formule de DV invalide : ${formula}`); + throw error; + } + + const dieValues = roll.dice.flatMap((die) => die.results?.map((result) => result.result) ?? []); + + await this.#createChatCard(actor, "systems/fvtt-donjon-et-cie/templates/chat/hit-dice-card.hbs", { + title: game.i18n.localize("DNC.Roll.HitDice"), + actorName: actor.name, + formula: roll.formula, + total: roll.total, + dieValues + }); + + return { formula: roll.formula, total: roll.total, dieValues }; + } + + static async rollWeapon(actor, item, { mode = "normal", favorKey = "" } = {}) { + const characteristicKey = DonjonEtCieUtility.getWeaponCharacteristicKey(item.system.categorie); + const favor = await this.#resolveFavorBoost(actor, favorKey, mode); + const effectiveMode = favor?.effectiveMode ?? mode; + const result = await this.#resolveCharacteristic(actor, characteristicKey, { mode: effectiveMode }); + + if (!result) return null; + + const characteristicLabel = DONJON_ET_CIE.characteristics[characteristicKey]?.label ?? characteristicKey; + const characteristicShort = DONJON_ET_CIE.characteristics[characteristicKey]?.short ?? characteristicKey; + + await this.#createChatCard(actor, "systems/fvtt-donjon-et-cie/templates/chat/roll-card.hbs", { + title: `${game.i18n.localize("DNC.Roll.Attack")} : ${item.name}`, + subtitle: DONJON_ET_CIE.weaponCategoryOptions[item.system.categorie] ?? item.system.categorie, + formula: result.values.length > 1 ? "2d20" : "1d20", + mode: effectiveMode, + modeLabel: this.#getModeLabel(effectiveMode), + target: result.target, + targetPillLabel: characteristicShort, + targetPillValue: result.target, + values: result.values, + kept: result.kept, + keptPillLabel: "Jet", + keptPillValue: result.kept, + success: result.success, + favorLabel: favor?.label ?? null, + favorNote: favor?.note ?? null, + showDamageButton: result.success && Boolean(item.system.degats), + itemUuid: item.uuid, + details: [ + { label: "Arme", value: item.name }, + { label: "Caracteristique", value: characteristicLabel }, + { label: `Valeur de ${characteristicLabel}`, value: result.target }, + { label: "Degats", value: item.system.degats || "—" }, + { label: "Portee", value: item.system.portee || "—" }, + ...(favor ? [ + { label: "Faveur", value: favor.label }, + { label: "Dé de faveur", value: favor.result }, + { label: "Avant", value: DonjonEtCieUtility.formatUsageDie(favor.before) }, + { label: "Apres", value: DonjonEtCieUtility.formatUsageDie(favor.after) } + ] : []) + ] + }); + + return { ...result, favor, mode: effectiveMode }; + } + + static async rollDamage(actor, item, { mode = "normal" } = {}) { + if (!item.system.degats) return null; + const actorBonus = Number(actor?.system?.combat?.degatsBonus ?? 0); + const totalBonus = actorBonus; + const formula = totalBonus ? `${item.system.degats} + ${totalBonus}` : item.system.degats; + const result = await this.#resolveFormulaRoll(formula, {}, { mode, favorable: "high" }); + const targets = DonjonEtCieUtility.getSceneDamageTargets(); + const rollDieLabels = result.rolls.map((roll) => { + const dieValues = roll.dice.flatMap((die) => die.results?.map((dieResult) => dieResult.result) ?? []); + return dieValues.length ? dieValues.join(" + ") : String(roll.total ?? "—"); + }); + const keptDieLabel = rollDieLabels[result.keptIndex] ?? rollDieLabels[0] ?? String(result.kept); + + await this.#createChatCard(actor ?? item.actor, "systems/fvtt-donjon-et-cie/templates/chat/damage-card.hbs", { + title: `${game.i18n.localize("DNC.Roll.Damage")} : ${item.name}`, + subtitle: item.system.portee || item.type, + formula: result.rolls.length > 1 ? `2 × ${result.formula}` : result.formula, + mode: result.mode, + modeLabel: this.#getModeLabel(result.mode), + rollDieLabels, + keptDieLabel, + values: result.values, + total: result.kept, + bonus: totalBonus, + baseDamage: item.system.degats, + sourceLabel: item.name, + targets, + hasTargets: targets.length > 0 + }); + + return { total: result.kept, formula: result.formula, bonus: totalBonus, values: result.values, mode: result.mode }; + } + + static async applyDamage(target, { damage = 0, useArmor = false, sourceLabel = "" } = {}) { + const actor = target?.actor ?? target; + if (!actor || actor.documentName !== "Actor") { + ui.notifications.warn(game.i18n.localize("DNC.Chat.InvalidDamageTarget")); + return null; + } + + const targetName = target?.name ?? actor.name; + const applied = await actor.applyIncomingDamage(damage, { useArmor }); + + await this.#createChatCard(actor, "systems/fvtt-donjon-et-cie/templates/chat/damage-application-card.hbs", { + title: game.i18n.localize("DNC.Chat.DamageApplied"), + subtitle: targetName, + sourceLabel, + total: applied.hpDamage, + incoming: applied.incoming, + useArmor: applied.useArmor, + armorLabel: applied.armorLabel, + armorAvailable: applied.armorAvailable, + armorBefore: applied.armorBefore, + armorAbsorbed: applied.armorAbsorbed, + armorAfter: applied.armorAfter, + pvBefore: applied.pvBefore, + pvAfter: applied.pvAfter, + pvMax: applied.pvMax + }); + + return { actor, targetName, ...applied }; + } + + static async rollSpell(actor, item, { mode = "normal", favorKey = "" } = {}) { + const characteristicKey = item.system.caracteristique || "intelligence"; + const focus = await this.#ensureFocus(actor); + const rank = Number(actor.system.anciennete?.rang ?? actor.system.sante?.dv ?? 0); + const cost = Number(item.system.coutPv ?? 0); + const autoDisadvantage = cost > rank; + const baseMode = autoDisadvantage ? "desavantage" : mode; + const favor = await this.#resolveFavorBoost(actor, favorKey, baseMode); + const effectiveMode = favor?.effectiveMode ?? baseMode; + const result = await this.#resolveCharacteristic(actor, characteristicKey, { mode: effectiveMode }); + + if (!result) return null; + + const currentPv = Number(actor.system.sante?.pv?.value ?? 0); + const availableMagicHp = currentPv + focus.activeValue; + + if (cost > availableMagicHp) { + ui.notifications.warn("Le lanceur ne dispose pas d'assez de PV et de focus pour payer ce sort."); + return null; + } + + const characteristicShort = DONJON_ET_CIE.characteristics[characteristicKey]?.short ?? characteristicKey; + const success = result.isNaturalTwenty ? false : result.success; + const focusSpent = result.isNaturalOne ? 0 : Math.min(cost, focus.activeValue); + const focusRemaining = Math.max(focus.activeValue - focusSpent, 0); + const spentPv = result.isNaturalOne ? 0 : Math.max(cost - focusSpent, 0); + const remainingPv = Math.max(currentPv - spentPv, 0); + const updateData = {}; + + if (spentPv !== 0) { + updateData["system.sante.pv.value"] = remainingPv; + } + + if (focusSpent !== 0) { + updateData["system.magie.focus.resultat"] = focusRemaining; + } + + if (Object.keys(updateData).length) { + await actor.update(updateData); + } + + const canInvokeChaos = !success && !result.isNaturalTwenty && Number(actor.system.magie?.chaos?.delta ?? 12) >= 4; + const specialNote = result.isNaturalTwenty + ? "20 naturel : la magie tourne a la catastrophe, au choix du MJ." + : (result.isNaturalOne ? "1 naturel : effet benefique possible ; par defaut, aucun PV n'est depense." : null); + + await this.#createChatCard(actor, "systems/fvtt-donjon-et-cie/templates/chat/spell-card.hbs", { + title: `${game.i18n.localize("DNC.Roll.Spell")} : ${item.name}`, + subtitle: item.system.portee || "Sortilege", + formula: result.values.length > 1 ? "2d20" : "1d20", + mode: effectiveMode, + modeLabel: this.#getModeLabel(effectiveMode), + autoDisadvantage, + autoDisadvantageCanceled: autoDisadvantage && Boolean(favor), + favorLabel: favor?.label ?? null, + favorNote: favor?.note ?? null, + targetPillLabel: characteristicShort, + targetPillValue: result.target, + values: result.values, + kept: result.kept, + keptPillLabel: "Jet", + keptPillValue: result.kept, + success, + specialNote, + showDamageButton: success && Boolean(item.system.degats), + showChaosButton: canInvokeChaos, + itemUuid: item.uuid, + actorUuid: actor.uuid, + details: [ + { label: "Sortilege", value: item.name }, + { label: "Caracteristique", value: result.characteristic.label }, + { label: "Valeur de la caracteristique", value: result.target }, + { label: "Cout en PV", value: cost }, + { label: "Focus", value: focus.activeValue > 0 ? `${focus.activeValue} (${DonjonEtCieUtility.formatUsageDie(focus.before)})` : "—" }, + { label: "Focus depense", value: focusSpent }, + { label: "Focus restant", value: focusRemaining }, + { label: "PV depenses", value: spentPv }, + { label: "PV restants", value: remainingPv }, + { label: "Rang du lanceur", value: rank }, + { label: "Difficulte", value: item.system.difficulte ?? 0 }, + { label: "Effet", value: item.system.effet || "—" }, + ...(favor ? [ + { label: "Faveur", value: favor.label }, + { label: "Dé de faveur", value: favor.result }, + { label: "Avant", value: DonjonEtCieUtility.formatUsageDie(favor.before) }, + { label: "Apres", value: DonjonEtCieUtility.formatUsageDie(favor.after) } + ] : []) + ], + focusRolled: focus.rolled, + focusValue: focus.activeValue, + focusSpent, + focusRemaining, + focusBeforeLabel: DonjonEtCieUtility.formatUsageDie(focus.before), + focusAfterLabel: DonjonEtCieUtility.formatUsageDie(focus.after), + focusDegraded: focus.degraded, + spentPv, + remainingPv + }); + + return { ...result, success, spentPv, remainingPv, cost, focus, focusSpent, focusRemaining, favor, mode: effectiveMode }; + } + + static async rollSpellChaos(actor, item) { + const before = Number(actor?.system?.magie?.chaos?.delta ?? 12); + if (!before || before < 4) { + ui.notifications.warn("Le Chaos n'est pas disponible pour ce sort."); + return null; + } + + const resolved = await this.#resolveFormulaRoll(`1d${before}`, {}, { favorable: "high" }); + const result = resolved.kept; + const degraded = result <= 3; + const after = degraded ? DonjonEtCieUtility.degradeUsageDie(before) : before; + const chaosEntry = DONJON_ET_CIE.chaosTable[result] ?? null; + + if (after !== before) { + await actor.update({ "system.magie.chaos.delta": after }); + } + + await this.#createChatCard(actor, "systems/fvtt-donjon-et-cie/templates/chat/chaos-card.hbs", { + title: `Chaos : ${item.name}`, + value: result, + before: DonjonEtCieUtility.formatUsageDie(before), + after: DonjonEtCieUtility.formatUsageDie(after), + chaosEntry, + degraded, + exhausted: after < 4, + itemName: item.name + }); + + return { result, before, after, degraded, chaosEntry }; + } + + static async rollUsage(item, { mode = "normal" } = {}) { + const before = Number(item.system.delta ?? 0); + if (!before) return null; + + const resolved = await this.#resolveFormulaRoll(`1d${before}`, {}, { mode, favorable: "high" }); + const result = resolved.kept; + const degraded = result <= 3; + const after = degraded ? DonjonEtCieUtility.degradeUsageDie(before) : before; + const updateData = {}; + + if (item.type === "armure") { + updateData["system.resultatProtection"] = result; + } + + if (after !== before) { + updateData["system.delta"] = after; + } + + if (Object.keys(updateData).length) { + await item.update(updateData); + } + + await this.#createChatCard(item.actor, "systems/fvtt-donjon-et-cie/templates/chat/usage-card.hbs", { + title: `${game.i18n.localize("DNC.Roll.Usage")} : ${item.name}`, + value: result, + values: resolved.values, + mode: resolved.mode, + modeLabel: this.#getModeLabel(resolved.mode), + before: DonjonEtCieUtility.formatUsageDie(before), + after: DonjonEtCieUtility.formatUsageDie(after), + protectionStored: item.type === "armure" ? result : null, + degraded, + exhausted: after === 0 + }); + + return { result, values: resolved.values, mode: resolved.mode, before, after, degraded }; + } +} diff --git a/modules/donjon-et-cie-utility.mjs b/modules/donjon-et-cie-utility.mjs new file mode 100644 index 0000000..09fcebe --- /dev/null +++ b/modules/donjon-et-cie-utility.mjs @@ -0,0 +1,189 @@ +import { DONJON_ET_CIE } from "./donjon-et-cie-config.mjs"; + +export class DonjonEtCieUtility { + static defaultItemIcons = { + arme: "systems/fvtt-donjon-et-cie/assets/icons/system/items/arme.svg", + armure: "systems/fvtt-donjon-et-cie/assets/icons/system/items/armure.svg", + trait: "systems/fvtt-donjon-et-cie/assets/icons/system/items/trait.svg", + sortilege: "systems/fvtt-donjon-et-cie/assets/icons/system/items/sortilege.svg", + equipement: "systems/fvtt-donjon-et-cie/assets/icons/system/items/equipement.svg", + other: "systems/fvtt-donjon-et-cie/assets/icons/system/items/autre.svg" + }; + + static async preloadHandlebarsTemplates() { + return foundry.applications.handlebars.loadTemplates([ + "systems/fvtt-donjon-et-cie/templates/actors/employe-sheet.hbs", + "systems/fvtt-donjon-et-cie/templates/actors/pnj-sheet.hbs", + "systems/fvtt-donjon-et-cie/templates/items/item-sheet.hbs", + "systems/fvtt-donjon-et-cie/templates/dialogs/characteristic-roll.hbs", + "systems/fvtt-donjon-et-cie/templates/dialogs/initiative-roll.hbs", + "systems/fvtt-donjon-et-cie/templates/dialogs/weapon-roll.hbs", + "systems/fvtt-donjon-et-cie/templates/dialogs/damage-roll.hbs", + "systems/fvtt-donjon-et-cie/templates/dialogs/spell-roll.hbs", + "systems/fvtt-donjon-et-cie/templates/dialogs/usage-roll.hbs", + "systems/fvtt-donjon-et-cie/templates/chat/roll-card.hbs", + "systems/fvtt-donjon-et-cie/templates/chat/spell-card.hbs", + "systems/fvtt-donjon-et-cie/templates/chat/chaos-card.hbs", + "systems/fvtt-donjon-et-cie/templates/chat/hit-dice-card.hbs", + "systems/fvtt-donjon-et-cie/templates/chat/damage-card.hbs", + "systems/fvtt-donjon-et-cie/templates/chat/damage-application-card.hbs", + "systems/fvtt-donjon-et-cie/templates/chat/favor-card.hbs", + "systems/fvtt-donjon-et-cie/templates/chat/initiative-card.hbs", + "systems/fvtt-donjon-et-cie/templates/chat/usage-card.hbs", + "systems/fvtt-donjon-et-cie/templates/chat/item-card.hbs" + ]); + } + + static getCharacteristicEntries(system) { + return Object.entries(DONJON_ET_CIE.characteristics).map(([key, metadata]) => ({ + key, + label: metadata.label, + short: metadata.short, + value: system.caracteristiques?.[key]?.value ?? 0 + })); + } + + static formatUsageDie(value) { + return value ? `Δ${value}` : "—"; + } + + static getDefaultItemIcon(type) { + return this.defaultItemIcons[type] ?? this.defaultItemIcons.other; + } + + static getCurrentSceneId() { + return canvas?.scene?.id ?? game.scenes?.current?.id ?? "global"; + } + + static getSceneDamageTargets() { + const scene = canvas?.scene ?? game.scenes?.current; + const tokens = scene?.tokens?.contents ?? []; + + return tokens + .map((token) => { + const actor = token.actor; + if (!actor || !["employe", "pnj"].includes(actor.type)) return null; + + const tokenName = token.name || actor.name; + const actorName = actor.name || tokenName; + const label = tokenName === actorName ? tokenName : `${tokenName} (${actorName})`; + + return { + tokenId: token.id, + tokenUuid: token.uuid, + actorUuid: actor.uuid, + label + }; + }) + .filter(Boolean) + .sort((a, b) => a.label.localeCompare(b.label, "fr", { sensitivity: "base" })); + } + + static getMagicResourceContext(actor) { + const rank = Number(actor.system.anciennete?.rang ?? actor.system.sante?.dv ?? 0); + const focusDelta = Number(actor.system.magie?.focus?.delta ?? 0); + const focusResult = Number(actor.system.magie?.focus?.resultat ?? 0); + const focusSceneId = actor.system.magie?.focus?.sceneId ?? ""; + const activeFocus = focusSceneId === this.getCurrentSceneId() ? focusResult : 0; + const chaosDelta = Number(actor.system.magie?.chaos?.delta ?? 12); + + return { + rank, + focusDelta, + focusLabel: this.formatUsageDie(focusDelta), + focusSceneId, + focusStoredResult: focusResult, + focusActiveValue: activeFocus, + focusIsActive: activeFocus > 0, + focusDisplay: activeFocus > 0 ? `${activeFocus} (${this.formatUsageDie(focusDelta)})` : "—", + chaosDelta, + chaosLabel: this.formatUsageDie(chaosDelta), + chaosAvailable: chaosDelta >= 4 + }; + } + + static getFavorLabel(key) { + return DONJON_ET_CIE.favorDepartments[key] ?? key; + } + + static getFavorEntries(system) { + const favors = system.faveurs ?? {}; + return Object.entries(DONJON_ET_CIE.favorDepartments).map(([key, label]) => { + const delta = Number(favors[key]?.delta ?? 0); + return { + key, + label, + delta, + deltaLabel: this.formatUsageDie(delta), + hasFavor: delta > 0 + }; + }); + } + + static getAvailableFavorOptions(actor) { + return this.getFavorEntries(actor.system) + .filter((entry) => entry.hasFavor) + .map((entry) => ({ value: entry.key, label: `${entry.label} (${entry.deltaLabel})` })); + } + + static getChaosTableEntries() { + return Object.entries(DONJON_ET_CIE.chaosTable) + .map(([value, entry]) => ({ value: Number(value), ...entry })) + .sort((a, b) => a.value - b.value); + } + + static degradeUsageDie(value) { + const sequence = [12, 10, 8, 6, 4]; + const index = sequence.indexOf(Number(value)); + if (index === -1) return 0; + return sequence[index + 1] ?? 0; + } + + static sortByName(documents) { + return [...documents].sort((a, b) => a.name.localeCompare(b.name, "fr", { sensitivity: "base" })); + } + + static getWeaponCharacteristicKey(category) { + return category === "distance" ? "dexterite" : "force"; + } + + static getWeaponCharacteristicLabel(category) { + const key = this.getWeaponCharacteristicKey(category); + return DONJON_ET_CIE.characteristics[key]?.label ?? key; + } + + static enrichItemForSheet(item) { + const system = item.system; + const delta = Number(system.delta ?? 0); + return { + id: item.id, + name: item.name, + type: item.type, + img: item.img, + system, + uuid: item.uuid, + usageLabel: delta > 0 ? this.formatUsageDie(delta) : null, + protectionLabel: item.type === "armure" && Number(system.resultatProtection ?? 0) > 0 ? `Protection ${system.resultatProtection}` : null, + weaponCharacteristicLabel: item.type === "arme" ? this.getWeaponCharacteristicLabel(system.categorie) : null, + canRoll: ["arme", "sortilege"].includes(item.type), + canUse: delta > 0, + canRollDamage: Boolean(system.degats), + rollAction: item.type === "sortilege" ? "rollSpell" : "rollWeapon", + damageAction: "rollDamage", + isEquipped: Boolean(system.equipee) + }; + } + + static buildActorSections(actor) { + return Object.entries(DONJON_ET_CIE.actorSections).map(([key, metadata]) => { + const types = DONJON_ET_CIE.sectionTypes[key]; + const items = this.sortByName(actor.items.filter((item) => types.includes(item.type))).map((item) => this.enrichItemForSheet(item)); + return { + key, + label: metadata.label, + createType: metadata.createType, + items + }; + }); + } +} diff --git a/modules/models/arme.mjs b/modules/models/arme.mjs new file mode 100644 index 0000000..7d0fe20 --- /dev/null +++ b/modules/models/arme.mjs @@ -0,0 +1,16 @@ +import BaseItemDataModel from "./base-item.mjs"; + +export default class ArmeDataModel extends BaseItemDataModel { + static defineSchema() { + const fields = foundry.data.fields; + return { + ...super.defineSchema(), + categorie: new fields.StringField({ initial: "melee" }), + caracteristique: new fields.StringField({ initial: "force" }), + degats: new fields.StringField({ initial: "1d6" }), + portee: new fields.StringField({ initial: "" }), + mains: new fields.NumberField({ initial: 1, integer: true }), + equipee: new fields.BooleanField({ initial: false }) + }; + } +} diff --git a/modules/models/armure.mjs b/modules/models/armure.mjs new file mode 100644 index 0000000..2d845bf --- /dev/null +++ b/modules/models/armure.mjs @@ -0,0 +1,14 @@ +import BaseItemDataModel from "./base-item.mjs"; + +export default class ArmureDataModel extends BaseItemDataModel { + static defineSchema() { + const fields = foundry.data.fields; + return { + ...super.defineSchema(), + delta: new fields.NumberField({ initial: 8, integer: true }), + resultatProtection: new fields.NumberField({ initial: 0, integer: true }), + equipee: new fields.BooleanField({ initial: false }), + encombrement: new fields.StringField({ initial: "" }) + }; + } +} diff --git a/modules/models/base-item.mjs b/modules/models/base-item.mjs new file mode 100644 index 0000000..b72d20f --- /dev/null +++ b/modules/models/base-item.mjs @@ -0,0 +1,9 @@ +export default class BaseItemDataModel extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields; + return { + description: new fields.HTMLField({ initial: "" }), + notes: new fields.HTMLField({ initial: "" }) + }; + } +} diff --git a/modules/models/capacite.mjs b/modules/models/capacite.mjs new file mode 100644 index 0000000..acb05da --- /dev/null +++ b/modules/models/capacite.mjs @@ -0,0 +1,12 @@ +import BaseItemDataModel from "./base-item.mjs"; + +export default class CapaciteDataModel extends BaseItemDataModel { + static defineSchema() { + const fields = foundry.data.fields; + return { + ...super.defineSchema(), + cout: new fields.StringField({ initial: "" }), + effet: new fields.StringField({ initial: "" }) + }; + } +} diff --git a/modules/models/consommable.mjs b/modules/models/consommable.mjs new file mode 100644 index 0000000..6f9b98e --- /dev/null +++ b/modules/models/consommable.mjs @@ -0,0 +1,13 @@ +import BaseItemDataModel from "./base-item.mjs"; + +export default class ConsommableDataModel extends BaseItemDataModel { + static defineSchema() { + const fields = foundry.data.fields; + return { + ...super.defineSchema(), + quantite: new fields.NumberField({ initial: 1, integer: true }), + delta: new fields.NumberField({ initial: 6, integer: true }), + effet: new fields.StringField({ initial: "" }) + }; + } +} diff --git a/modules/models/employe.mjs b/modules/models/employe.mjs new file mode 100644 index 0000000..18815ee --- /dev/null +++ b/modules/models/employe.mjs @@ -0,0 +1,66 @@ +import { DONJON_ET_CIE } from "../donjon-et-cie-config.mjs"; + +export default class EmployeDataModel extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields; + const makeCharacteristic = (label, short) => new fields.SchemaField({ + label: new fields.StringField({ initial: label }), + short: new fields.StringField({ initial: short }), + value: new fields.NumberField({ initial: 10, integer: true }) + }); + const favorFields = Object.fromEntries(Object.keys(DONJON_ET_CIE.favorDepartments).map((key) => [ + key, + new fields.SchemaField({ + delta: new fields.NumberField({ initial: 0, integer: true }) + }) + ])); + + return { + concept: new fields.StringField({ initial: "" }), + anciennete: new fields.SchemaField({ + rang: new fields.NumberField({ initial: 1, integer: true }), + libelle: new fields.StringField({ initial: "Nouvel employe" }) + }), + caracteristiques: new fields.SchemaField({ + force: makeCharacteristic("FORce", "FOR"), + dexterite: makeCharacteristic("DEXterite", "DEX"), + constitution: makeCharacteristic("CONstitution", "CON"), + intelligence: makeCharacteristic("INTelligence", "INT"), + sagesse: makeCharacteristic("SAGesse", "SAG"), + charisme: makeCharacteristic("CHArisme", "CHA") + }), + sante: new fields.SchemaField({ + dv: new fields.StringField({ initial: "1d6" }), + pv: new fields.SchemaField({ + value: new fields.NumberField({ initial: 6, integer: true }), + max: new fields.NumberField({ initial: 6, integer: true }) + }) + }), + combat: new fields.SchemaField({ + initiativeBonus: new fields.NumberField({ initial: 0, integer: true }), + degatsBonus: new fields.NumberField({ initial: 0, integer: true }), + attaquesCorpsACorps: new fields.NumberField({ initial: 1, integer: true }), + attaquesDistance: new fields.NumberField({ initial: 1, integer: true }) + }), + magie: new fields.SchemaField({ + focus: new fields.SchemaField({ + delta: new fields.NumberField({ initial: 0, integer: true }), + resultat: new fields.NumberField({ initial: 0, integer: true }), + sceneId: new fields.StringField({ initial: "" }) + }), + chaos: new fields.SchemaField({ + delta: new fields.NumberField({ initial: 12, integer: true }) + }) + }), + profil: new fields.SchemaField({ + objectifPersonnel: new fields.HTMLField({ initial: "" }), + suspicion: new fields.NumberField({ initial: 0, integer: true }), + avertissements: new fields.NumberField({ initial: 0, integer: true }), + missionsReussies: new fields.NumberField({ initial: 0, integer: true }) + }), + faveurs: new fields.SchemaField(favorFields), + notes: new fields.HTMLField({ initial: "" }), + gmnotes: new fields.HTMLField({ initial: "" }) + }; + } +} diff --git a/modules/models/equipement.mjs b/modules/models/equipement.mjs new file mode 100644 index 0000000..52220da --- /dev/null +++ b/modules/models/equipement.mjs @@ -0,0 +1,13 @@ +import BaseItemDataModel from "./base-item.mjs"; + +export default class EquipementDataModel extends BaseItemDataModel { + static defineSchema() { + const fields = foundry.data.fields; + return { + ...super.defineSchema(), + quantite: new fields.NumberField({ initial: 1, integer: true }), + equipee: new fields.BooleanField({ initial: false }), + emplacement: new fields.StringField({ initial: "" }) + }; + } +} diff --git a/modules/models/index.mjs b/modules/models/index.mjs new file mode 100644 index 0000000..15bff62 --- /dev/null +++ b/modules/models/index.mjs @@ -0,0 +1,11 @@ +export { default as BaseItemDataModel } from "./base-item.mjs"; +export { default as TraitDataModel } from "./trait.mjs"; +export { default as LangueDataModel } from "./langue.mjs"; +export { default as CapaciteDataModel } from "./capacite.mjs"; +export { default as SortilegeDataModel } from "./sortilege.mjs"; +export { default as ArmeDataModel } from "./arme.mjs"; +export { default as ArmureDataModel } from "./armure.mjs"; +export { default as EquipementDataModel } from "./equipement.mjs"; +export { default as ConsommableDataModel } from "./consommable.mjs"; +export { default as EmployeDataModel } from "./employe.mjs"; +export { default as PnjDataModel } from "./pnj.mjs"; diff --git a/modules/models/langue.mjs b/modules/models/langue.mjs new file mode 100644 index 0000000..14e2ca1 --- /dev/null +++ b/modules/models/langue.mjs @@ -0,0 +1,11 @@ +import BaseItemDataModel from "./base-item.mjs"; + +export default class LangueDataModel extends BaseItemDataModel { + static defineSchema() { + const fields = foundry.data.fields; + return { + ...super.defineSchema(), + niveau: new fields.StringField({ initial: "courant" }) + }; + } +} diff --git a/modules/models/pnj.mjs b/modules/models/pnj.mjs new file mode 100644 index 0000000..f4b48e7 --- /dev/null +++ b/modules/models/pnj.mjs @@ -0,0 +1,36 @@ +export default class PnjDataModel extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields; + + return { + espece: new fields.StringField({ initial: "" }), + categorie: new fields.StringField({ initial: "Resident" }), + role: new fields.StringField({ initial: "" }), + resume: new fields.StringField({ initial: "" }), + sante: new fields.SchemaField({ + dv: new fields.StringField({ initial: "1d8" }), + pv: new fields.SchemaField({ + value: new fields.NumberField({ initial: 6, integer: true }), + max: new fields.NumberField({ initial: 6, integer: true }) + }) + }), + defense: new fields.SchemaField({ + armure: new fields.SchemaField({ + delta: new fields.NumberField({ initial: 0, integer: true }), + resultatProtection: new fields.NumberField({ initial: 0, integer: true }) + }), + courage: new fields.SchemaField({ + delta: new fields.NumberField({ initial: 0, integer: true }) + }) + }), + attaque: new fields.SchemaField({ + nom: new fields.StringField({ initial: "Attaque" }), + degats: new fields.StringField({ initial: "1d6" }), + notes: new fields.StringField({ initial: "" }) + }), + pouvoirsSpeciaux: new fields.HTMLField({ initial: "" }), + description: new fields.HTMLField({ initial: "" }), + notes: new fields.HTMLField({ initial: "" }) + }; + } +} diff --git a/modules/models/sortilege.mjs b/modules/models/sortilege.mjs new file mode 100644 index 0000000..715fe8f --- /dev/null +++ b/modules/models/sortilege.mjs @@ -0,0 +1,17 @@ +import BaseItemDataModel from "./base-item.mjs"; + +export default class SortilegeDataModel extends BaseItemDataModel { + static defineSchema() { + const fields = foundry.data.fields; + return { + ...super.defineSchema(), + caracteristique: new fields.StringField({ initial: "intelligence" }), + difficulte: new fields.NumberField({ initial: 0, integer: true }), + coutPv: new fields.NumberField({ initial: 0, integer: true }), + portee: new fields.StringField({ initial: "" }), + duree: new fields.StringField({ initial: "" }), + effet: new fields.StringField({ initial: "" }), + degats: new fields.StringField({ initial: "" }) + }; + } +} diff --git a/modules/models/trait.mjs b/modules/models/trait.mjs new file mode 100644 index 0000000..aadb7ae --- /dev/null +++ b/modules/models/trait.mjs @@ -0,0 +1,11 @@ +import BaseItemDataModel from "./base-item.mjs"; + +export default class TraitDataModel extends BaseItemDataModel { + static defineSchema() { + const fields = foundry.data.fields; + return { + ...super.defineSchema(), + etiquette: new fields.StringField({ initial: "" }) + }; + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d3f9afa --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4983 @@ +{ + "name": "fvtt-donjon-et-cie", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "fvtt-donjon-et-cie", + "version": "0.1.0", + "license": "UNLICENSED", + "devDependencies": { + "gulp": "^4.0.2", + "gulp-less": "^5.0.0", + "gulp-rename": "^2.0.0", + "gulp-sourcemaps": "^3.0.0" + } + }, + "node_modules/@gulp-sourcemaps/identity-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-2.0.1.tgz", + "integrity": "sha512-Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^6.4.1", + "normalize-path": "^3.0.0", + "postcss": "^7.0.16", + "source-map": "^0.6.0", + "through2": "^3.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@gulp-sourcemaps/identity-map/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/@gulp-sourcemaps/map-sources": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", + "integrity": "sha512-o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==", + "dev": true, + "license": "MIT", + "dependencies": { + "normalize-path": "^2.0.1", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@gulp-sourcemaps/map-sources/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@gulp-sourcemaps/map-sources/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "license": "ISC", + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-done": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dev": true, + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/debug-fabulous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", + "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "3.X", + "memoizee": "0.4.X", + "object-assign": "4.X" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "node_modules/each-props/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "dev": true, + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fined/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "dev": true, + "license": "MIT", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fs-mkdirp-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true, + "license": "ISC" + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-less": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gulp-less/-/gulp-less-5.0.0.tgz", + "integrity": "sha512-W2I3TewO/By6UZsM/wJG3pyK5M6J0NYmJAAhwYXQHR+38S0iDtZasmUgFCH3CQj+pQYw/PAIzxvFvwtEXz1HhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "less": "^3.7.1 || ^4.0.0", + "object-assign": "^4.0.1", + "plugin-error": "^1.0.0", + "replace-ext": "^2.0.0", + "through2": "^4.0.0", + "vinyl-sourcemaps-apply": "^0.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/gulp-rename": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.1.0.tgz", + "integrity": "sha512-dGuzuH8jQGqCMqC544IEPhs5+O2l+IkdoSZsgd4kY97M1CxQeI3qrmweQBIrxLBbjbe/8uEWK8HHcNBc3OCy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-sourcemaps": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-3.0.0.tgz", + "integrity": "sha512-RqvUckJkuYqy4VaIH60RMal4ZtG0IbQ6PXMNkNsshEGJ9cldUPRb/YCgboYae+CLAs1HQNb4ADTKCx65HInquQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gulp-sourcemaps/identity-map": "^2.0.1", + "@gulp-sourcemaps/map-sources": "^1.0.0", + "acorn": "^6.4.1", + "convert-source-map": "^1.0.0", + "css": "^3.0.0", + "debug-fabulous": "^1.0.0", + "detect-newline": "^2.0.0", + "graceful-fs": "^4.0.0", + "source-map": "^0.6.0", + "strip-bom-string": "^1.0.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gulp-sourcemaps/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glogg": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/just-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", + "dev": true, + "license": "MIT", + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/less": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/less/-/less-4.6.4.tgz", + "integrity": "sha512-OJmO5+HxZLLw0RLzkqaNHzcgEAQG7C0y3aMbwtCzIUFZsLMNNq/1IdAdHEycQ58CwUO3jPTHmoN+tE5I7FQxNg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^3.0.5", + "parse-node-version": "^1.0.1" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/liftoff/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-iterator/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/matchdep/node_modules/findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/matchdep/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoizee": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", + "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "es5-ext": "^0.10.64", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/nan": { + "version": "2.26.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.26.2.tgz", + "integrity": "sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/needle": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.5.0.tgz", + "integrity": "sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true, + "license": "ISC" + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/plugin-error/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-bom-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true, + "license": "ISC" + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", + "dev": true, + "license": "ISC" + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true, + "license": "MIT" + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "dev": true, + "license": "BlueOak-1.0.0", + "optional": true, + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "sver-compat": "^1.5.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true, + "license": "MIT" + }, + "node_modules/sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/through2-filter/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/timers-ext": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", + "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", + "dev": true, + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/to-through/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.4.0.tgz", + "integrity": "sha512-V6QarSfeSgDipGA9EZdoIzu03ZDlOFkk+FbEP5cwgrZXN3iIkYR91IjU2EnM6rB835kGQsqHX8qncObTXV+6KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "3.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true, + "license": "MIT" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", + "dev": true, + "license": "ISC", + "dependencies": { + "source-map": "^0.5.1" + } + }, + "node_modules/vinyl-sourcemaps-apply/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl/node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "node_modules/yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8e99469 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "fvtt-donjon-et-cie", + "version": "0.1.0", + "description": "Systeme FoundryVTT pour Donjon & Cie", + "type": "module", + "scripts": { + "build": "gulp build", + "watch": "gulp watch" + }, + "license": "UNLICENSED", + "devDependencies": { + "gulp": "^4.0.2", + "gulp-less": "^5.0.0", + "gulp-rename": "^2.0.0", + "gulp-sourcemaps": "^3.0.0" + } +} diff --git a/packs/equipment/000014.ldb b/packs/equipment/000014.ldb new file mode 100644 index 0000000..adce54a Binary files /dev/null and b/packs/equipment/000014.ldb differ diff --git a/packs/equipment/000017.log b/packs/equipment/000017.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/equipment/CURRENT b/packs/equipment/CURRENT new file mode 100644 index 0000000..42c62b6 --- /dev/null +++ b/packs/equipment/CURRENT @@ -0,0 +1 @@ +MANIFEST-000015 diff --git a/packs/equipment/LOCK b/packs/equipment/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/equipment/LOG b/packs/equipment/LOG new file mode 100644 index 0000000..dc89c5b --- /dev/null +++ b/packs/equipment/LOG @@ -0,0 +1,8 @@ +2026/04/13-15:38:21.573543 7f2a6bfff6c0 Recovering log #12 +2026/04/13-15:38:21.584944 7f2a6bfff6c0 Delete type=3 #10 +2026/04/13-15:38:21.585068 7f2a6bfff6c0 Delete type=0 #12 +2026/04/13-15:53:03.495112 7f2a69ffb6c0 Level-0 table #18: started +2026/04/13-15:53:03.495152 7f2a69ffb6c0 Level-0 table #18: 0 bytes OK +2026/04/13-15:53:03.502660 7f2a69ffb6c0 Delete type=0 #16 +2026/04/13-15:53:03.512745 7f2a69ffb6c0 Manual compaction at level-0 from '!folders!K9aiFu0dE6UYiXBd' @ 72057594037927935 : 1 .. '!items!zyqLzmpbHxK3jt5q' @ 0 : 0; will stop at (end) +2026/04/13-15:53:03.512766 7f2a69ffb6c0 Manual compaction at level-1 from '!folders!K9aiFu0dE6UYiXBd' @ 72057594037927935 : 1 .. '!items!zyqLzmpbHxK3jt5q' @ 0 : 0; will stop at (end) diff --git a/packs/equipment/LOG.old b/packs/equipment/LOG.old new file mode 100644 index 0000000..eb500b1 --- /dev/null +++ b/packs/equipment/LOG.old @@ -0,0 +1,15 @@ +2026/04/13-14:20:53.821658 7f2a6a7fc6c0 Recovering log #8 +2026/04/13-14:20:53.882853 7f2a6a7fc6c0 Delete type=3 #6 +2026/04/13-14:20:53.882927 7f2a6a7fc6c0 Delete type=0 #8 +2026/04/13-15:36:59.141684 7f2a69ffb6c0 Level-0 table #13: started +2026/04/13-15:36:59.159908 7f2a69ffb6c0 Level-0 table #13: 17264 bytes OK +2026/04/13-15:36:59.196740 7f2a69ffb6c0 Delete type=0 #11 +2026/04/13-15:36:59.196889 7f2a69ffb6c0 Manual compaction at level-0 from '!folders!K9aiFu0dE6UYiXBd' @ 72057594037927935 : 1 .. '!items!zyqLzmpbHxK3jt5q' @ 0 : 0; will stop at (end) +2026/04/13-15:36:59.196903 7f2a69ffb6c0 Manual compaction at level-1 from '!folders!K9aiFu0dE6UYiXBd' @ 72057594037927935 : 1 .. '!items!zyqLzmpbHxK3jt5q' @ 0 : 0; will stop at '!items!zyqLzmpbHxK3jt5q' @ 188 : 1 +2026/04/13-15:36:59.196907 7f2a69ffb6c0 Compacting 1@1 + 1@2 files +2026/04/13-15:36:59.215046 7f2a69ffb6c0 Generated table #14@1: 189 keys, 41244 bytes +2026/04/13-15:36:59.215073 7f2a69ffb6c0 Compacted 1@1 + 1@2 files => 41244 bytes +2026/04/13-15:36:59.252384 7f2a69ffb6c0 compacted to: files[ 0 0 1 0 0 0 0 ] +2026/04/13-15:36:59.252567 7f2a69ffb6c0 Delete type=2 #5 +2026/04/13-15:36:59.257663 7f2a69ffb6c0 Delete type=2 #13 +2026/04/13-15:36:59.369183 7f2a69ffb6c0 Manual compaction at level-1 from '!items!zyqLzmpbHxK3jt5q' @ 188 : 1 .. '!items!zyqLzmpbHxK3jt5q' @ 0 : 0; will stop at (end) diff --git a/packs/equipment/MANIFEST-000015 b/packs/equipment/MANIFEST-000015 new file mode 100644 index 0000000..2c6d263 Binary files /dev/null and b/packs/equipment/MANIFEST-000015 differ diff --git a/packs/random-tables/000004.log b/packs/random-tables/000004.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/random-tables/000005.ldb b/packs/random-tables/000005.ldb new file mode 100644 index 0000000..a89aee5 Binary files /dev/null and b/packs/random-tables/000005.ldb differ diff --git a/packs/random-tables/CURRENT b/packs/random-tables/CURRENT new file mode 100644 index 0000000..1a84852 --- /dev/null +++ b/packs/random-tables/CURRENT @@ -0,0 +1 @@ +MANIFEST-000002 diff --git a/packs/random-tables/LOCK b/packs/random-tables/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/random-tables/LOG b/packs/random-tables/LOG new file mode 100644 index 0000000..40b3c5d --- /dev/null +++ b/packs/random-tables/LOG @@ -0,0 +1,5 @@ +2026/04/13-15:38:21.601302 7f2a6a7fc6c0 Delete type=3 #1 +2026/04/13-15:53:03.477052 7f2a69ffb6c0 Level-0 table #5: started +2026/04/13-15:53:03.481742 7f2a69ffb6c0 Level-0 table #5: 39147 bytes OK +2026/04/13-15:53:03.488722 7f2a69ffb6c0 Delete type=0 #3 +2026/04/13-15:53:03.512725 7f2a69ffb6c0 Manual compaction at level-0 from '!tables!PPsxQgHwLCQ2gjSW' @ 72057594037927935 : 1 .. '!tables.results!wJZXUo4q5b5vE3Dy.zFTPLMc9zOl5hISV' @ 0 : 0; will stop at (end) diff --git a/packs/random-tables/MANIFEST-000002 b/packs/random-tables/MANIFEST-000002 new file mode 100644 index 0000000..dcbf098 Binary files /dev/null and b/packs/random-tables/MANIFEST-000002 differ diff --git a/styles/donjon-et-cie.css b/styles/donjon-et-cie.css new file mode 100644 index 0000000..fe11f5b --- /dev/null +++ b/styles/donjon-et-cie.css @@ -0,0 +1,912 @@ +@font-face { + font-family: "IM Fell English SC"; + src: url("../assets/fonts/im-fell-english-sc.ttf") format("truetype"); + font-weight: 400; + font-style: normal; + font-display: swap; +} +.fvtt-donjon-et-cie { + --dnc-ink: #221b18; + --dnc-accent: #8b2e17; +} +.fvtt-donjon-et-cie .window-content { + font-family: "Signika", sans-serif; + color: #221b18; + background: linear-gradient(180deg, #f8f1e6 0%, #eadac0 100%); +} +#pause { + font-size: 2rem; +} +#pause.paused { + gap: 0.5rem; +} +#pause > figcaption { + color: #ccc; + text-shadow: 0 0 10px rgba(255, 255, 255, 0.25); +} +#pause > img { + opacity: 0; + height: 0; + width: 0; +} +#pause::before { + content: ""; + display: block; + background: url("../assets/ui/logo_01.webp") center / contain no-repeat; + height: 200px; + width: 200px; + margin-bottom: 0.75rem; + animation: dnc-pause-logo 4.2s ease-in-out infinite; + transform-origin: 50% 50%; + filter: drop-shadow(0 10px 20px rgba(0, 0, 0, 0.35)); +} +@keyframes dnc-pause-logo { + 0%, + 100% { + transform: scale(0.98) translateY(0); + filter: drop-shadow(0 10px 20px rgba(0, 0, 0, 0.3)); + } + 50% { + transform: scale(1.03) translateY(-6px); + filter: drop-shadow(0 16px 26px rgba(0, 0, 0, 0.45)); + } +} +.dnc-sheet { + display: flex; + flex-direction: column; + gap: 1rem; + padding: 1rem; +} +.sheet-card { + border: 2px solid #5b4634; + border-radius: 10px; + background: rgba(255, 248, 236, 0.92); + box-shadow: 0 6px 14px rgba(0, 0, 0, 0.22); + padding: 1rem; +} +.fvtt-donjon-et-cie .sheet-card h2, +.fvtt-donjon-et-cie .dnc-chat-card h2 { + margin: 0 0 0.75rem; + font-family: "IM Fell English SC", "Palatino Linotype", "Book Antiqua", Palatino, serif !important; + font-size: 1.15rem; + color: #8b2e17; + text-transform: uppercase; + letter-spacing: 0.04em; +} +.sheet-header { + display: grid; + grid-template-columns: 140px 1fr; + gap: 1rem; + align-items: start; +} +.sheet-header.compact { + grid-template-columns: 110px 1fr; + gap: 0.75rem; +} +.portrait { + position: relative; +} +.portrait img { + width: 100%; + aspect-ratio: 1; + object-fit: cover; + border-radius: 10px; + border: 3px solid #5b4634; + background: #fff; +} +.icon-button { + position: absolute; + right: 0.4rem; + bottom: 0.4rem; + border: 0; + border-radius: 999px; + background: #32261c; + color: #fff; + width: 2rem; + height: 2rem; +} +.identity-grid, +.identity-grid.two-columns { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 0.75rem; +} +.identity-grid.two-columns { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} +.dnc-employe-sheet .sheet-header.compact .identity-grid { + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: 0.4rem 0.75rem; +} +.dnc-employe-sheet .sheet-header.compact label { + gap: 0.25rem; +} +.dnc-employe-sheet .sheet-header.compact input[type="number"] { + max-width: 4.75rem; +} +.dnc-employe-sheet .sheet-header.compact .counter-field input[type="number"] { + max-width: 4rem; +} +.dnc-pnj-sheet .sheet-header.compact .identity-grid { + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 0.4rem 0.75rem; +} +.dnc-pnj-sheet .sheet-header.compact label { + gap: 0.25rem; +} +.dnc-pnj-sheet .sheet-header.compact input[type="number"] { + width: 4.5rem; + max-width: 4.5rem; +} +.dnc-pnj-sheet .sheet-header.compact .counter-field input[type="number"] { + width: 3.75rem; + max-width: 3.75rem; +} +.dnc-sheet label { + display: flex; + flex-direction: column; + gap: 0.4rem; +} +.dnc-sheet label > span { + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: #6d5a4f; +} +.readonly-field { + display: flex; + flex-direction: column; + gap: 0.4rem; +} +.readonly-field > span { + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: #6d5a4f; +} +.readonly-field p { + margin: 0; + border: 1px solid rgba(91, 70, 52, 0.55); + border-radius: 6px; + background: rgba(255, 255, 255, 0.65); + color: #221b18; + padding: 0.45rem 0.55rem; +} +.dnc-sheet input, +.dnc-sheet select, +.dnc-sheet textarea, +.dnc-dialog-form input, +.dnc-dialog-form select { + width: 100%; + border: 1px solid rgba(91, 70, 52, 0.55); + border-radius: 6px; + background: rgba(255, 255, 255, 0.9); + color: #221b18; + padding: 0.45rem 0.55rem; +} +.dnc-sheet textarea { + resize: vertical; + min-height: 4.5rem; +} +.sheet-columns { + display: grid; + grid-template-columns: minmax(250px, 320px) 1fr; + gap: 1rem; +} +.sheet-sections { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 1rem; +} +.compact-sections { + grid-template-columns: 1fr; +} +.counter-field { + display: flex; + align-items: center; + gap: 0.4rem; +} +.counter-field button, +.item-actions button, +.sheet-footer button, +.text-button, +.roll-button { + border: 1px solid #5b4634; + border-radius: 6px; + background: linear-gradient(180deg, #fdf9f2 0%, #e8d5ba 100%); + color: #221b18; + min-height: 2rem; + padding: 0.35rem 0.65rem; +} +.text-button { + white-space: nowrap; +} +.roll-button { + width: 2rem; + padding: 0; +} +.with-controls { + gap: 0.4rem; +} +.section-header { + display: flex; + justify-content: space-between; + align-items: center; + gap: 0.75rem; + margin-bottom: 0.75rem; +} +.empty-state { + margin: 0; + color: #6d5a4f; + font-style: italic; +} +.span-two { + grid-column: span 2; +} +.characteristic-list { + display: flex; + flex-direction: column; + gap: 0.4rem; +} +.characteristic-row { + display: grid; + grid-template-columns: 2rem 1fr 4rem; + gap: 0.4rem; + align-items: center; +} +.characteristic-label { + font-weight: 700; +} +.profile-counters { + display: grid; + grid-template-columns: 1fr; + gap: 0.75rem; +} +.profile-card-wide { + width: 100%; +} +.profile-layout { + display: grid; + grid-template-columns: minmax(0, 1.15fr) minmax(320px, 0.85fr); + gap: 1rem; + align-items: start; +} +.profile-column { + display: flex; + flex-direction: column; + gap: 0.75rem; +} +.favor-card { + margin: 0.75rem 0; + padding: 0.75rem; + border: 1px dashed rgba(91, 70, 52, 0.55); + border-radius: 10px; + background: rgba(226, 208, 177, 0.35); +} +.favor-header h2 { + margin-bottom: 0.4rem; +} +.favor-help { + margin: 0 0 0.75rem; + color: #6d5a4f; + font-size: 0.82rem; +} +.favor-list { + display: grid; + gap: 0.4rem; +} +.favor-row { + display: grid; + grid-template-columns: minmax(0, 1fr) 4.5rem auto; + gap: 0.4rem; + align-items: end; +} +.favor-meta { + min-height: 2.3rem; + display: flex; + align-items: center; + justify-content: center; + border-radius: 6px; + background: rgba(255, 255, 255, 0.7); + border: 1px solid rgba(91, 70, 52, 0.35); + font-weight: 700; +} +.magic-layout { + align-items: start; + margin-bottom: 0.75rem; +} +.magic-layout .sheet-column { + display: flex; + flex-direction: column; + gap: 0.75rem; +} +.magic-resource-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); + gap: 0.75rem; + align-items: end; +} +.chaos-table-wrapper { + margin-top: 0.75rem; +} +.chaos-table-wrapper h3 { + margin: 0 0 0.4rem; + font-size: 0.95rem; +} +.chaos-table-caption { + margin: 0 0 0.4rem; + color: #6d5a4f; + font-size: 0.78rem; + font-style: italic; +} +.chaos-table { + width: 100%; + border-collapse: collapse; + font-size: 0.8rem; +} +.chaos-table th, +.chaos-table td { + padding: 0.4rem 0.45rem; + border: 1px solid rgba(91, 70, 52, 0.35); + vertical-align: top; +} +.chaos-table th { + text-align: left; + background: rgba(226, 208, 177, 0.55); +} +.sheet-tabs { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; + margin: 1rem 0 0.75rem; + justify-content: center; +} +.sheet-tab { + border: 1px solid rgba(91, 70, 52, 0.8); + border-radius: 10px; + background: rgba(226, 208, 177, 0.55); + color: #221b18; + font-weight: 700; + padding: 0.4rem 0.75rem; +} +.sheet-tab.active { + background: #8b2e17; + border-color: #561d0e; + color: #fff; +} +.sheet-tab-panel { + display: none; +} +.sheet-tab-panel.active { + display: block; +} +.item-list { + display: flex; + flex-direction: column; + gap: 0.75rem; +} +.item-section.is-dragover { + border-color: #8b2e17; + box-shadow: 0 0 0 2px rgba(139, 46, 23, 0.2); +} +.item-dropzone { + border: 1px dashed rgba(91, 70, 52, 0.75); + border-radius: 10px; + padding: 0.75rem; + min-height: 3.25rem; + background: rgba(226, 208, 177, 0.45); + color: #6d5a4f; + display: flex; + align-items: center; + justify-content: center; + text-align: center; + font-size: 0.9rem; + font-weight: 600; +} +.item-dropzone.has-items { + padding: 0.4rem 0.75rem; + font-size: 0.8rem; +} +.item-section.is-dragover .item-dropzone { + border-color: #8b2e17; + background: rgba(139, 46, 23, 0.12); + color: #221b18; +} +.item { + display: grid; + grid-template-columns: 48px 1fr auto; + gap: 0.75rem; + align-items: start; + border-top: 1px dashed rgba(91, 70, 52, 0.45); + padding-top: 0.75rem; +} +.item:first-child { + border-top: 0; + padding-top: 0; +} +.item img { + width: 48px; + height: 48px; + object-fit: cover; + border-radius: 6px; + border: 1px solid #5b4634; + background: #fff; +} +.item-main p { + margin: 0.4rem 0 0; + color: #6d5a4f; +} +.item-title-row { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; + align-items: center; +} +.item-meta { + border-radius: 999px; + background: #e2d0b1; + color: #221b18; + font-size: 0.75rem; + padding: 0.1rem 0.5rem; +} +.item-actions { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; + justify-content: flex-end; +} +.pnj-layout .sheet-column { + display: flex; + flex-direction: column; + gap: 0.75rem; +} +.pnj-combat-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0.75rem; + align-items: end; +} +.pnj-combat-grid .span-two { + grid-column: 1 / -1; +} +.application.fvtt-donjon-et-cie.item { + display: flex !important; + flex-direction: column; + padding-top: 0 !important; +} +.application.fvtt-donjon-et-cie.item > .window-header { + position: relative; + z-index: 2; + width: 100% !important; + flex: 0 0 auto; +} +.application.fvtt-donjon-et-cie.item > .window-content { + width: 100% !important; + flex: 1 1 auto; + overflow-y: auto !important; + overflow-x: hidden !important; +} +.application.fvtt-donjon-et-cie.item > .window-content > .dnc-sheet { + min-height: fit-content; +} +.dnc-item-sheet .identity-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} +.sheet-footer { + display: flex; + gap: 0.75rem; + justify-content: flex-end; +} +.dnc-dialog-form { + display: flex; + flex-direction: column; + gap: 0.75rem; +} +.dnc-roll-dialog, +.dnc-roll-dialog .window-content, +.dnc-dialog-form, +.dnc-dialog-form p, +.dnc-dialog-form label, +.dnc-dialog-form label > span { + color: #221b18; +} +.dnc-dialog-form p { + margin: 0; +} +.dnc-dialog-form label { + display: flex; + flex-direction: column; + gap: 0.4rem; + font-weight: 700; +} +.dnc-dialog-form label > span { + font-size: 0.82rem; + font-weight: 700; + letter-spacing: 0.04em; + text-transform: uppercase; +} +.dnc-roll-dialog .window-content { + background: linear-gradient(180deg, #f7efe0 0%, #e3d0b1 100%); +} +.dnc-chat-card { + position: relative; + border: 2px solid #5b4634; + border-radius: 16px; + background: linear-gradient(180deg, rgba(255, 255, 255, 0.78) 0%, rgba(245, 234, 210, 0.92) 100%), linear-gradient(135deg, #fdf6e7 0%, #e7d2ab 100%); + color: #221b18; + padding: 1rem; + box-shadow: 0 12px 30px rgba(0, 0, 0, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.65); + overflow: hidden; +} +.chat-message .message-content .dnc-chat-card h2 { + margin: 0 !important; + font-size: 0.82rem !important; + line-height: 1.1 !important; + letter-spacing: 0.02em !important; +} +.dnc-chat-card::before { + content: ""; + position: absolute; + inset: 0; + border-radius: inherit; + pointer-events: none; + background: radial-gradient(circle at top right, rgba(255, 255, 255, 0.45), transparent 30%), linear-gradient(90deg, rgba(139, 46, 23, 0.14) 0, rgba(139, 46, 23, 0.14) 0.3rem, transparent 0.3rem); +} +.chat-card-header { + position: relative; + z-index: 1; + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 0.75rem; + margin-bottom: 0.75rem; +} +.chat-card-heading { + min-width: 0; +} +.chat-card-kicker { + margin: 0 0 0.25rem; + font-size: 0.7rem; + font-weight: 700; + letter-spacing: 0.16em; + text-transform: uppercase; + color: rgba(139, 46, 23, 0.8); +} +.chat-card-subtitle { + margin: 0.2rem 0 0; + color: #6d5a4f; +} +.chat-card-seal, +.chat-card-total { + position: relative; + z-index: 1; + flex: 0 0 auto; +} +.chat-card-seal { + min-width: 3.4rem; + border-radius: 999px; + border: 1px solid rgba(91, 70, 52, 0.55); + background: rgba(255, 255, 255, 0.72); + padding: 0.4rem 0.7rem; + text-align: center; + font-size: 0.72rem; + font-weight: 800; + letter-spacing: 0.12em; +} +.chat-card-seal.success { + color: #122b17; +} +.chat-card-seal.failure { + color: #561d1d; +} +.chat-card-total { + min-width: 5.75rem; + border-radius: 14px; + border: 1px solid rgba(91, 70, 52, 0.45); + background: linear-gradient(180deg, rgba(255, 255, 255, 0.82) 0%, rgba(247, 232, 198, 0.95) 100%); + padding: 0.45rem 0.8rem; + text-align: center; +} +.chat-card-total span { + display: block; + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.14em; + text-transform: uppercase; + color: #6d5a4f; +} +.chat-card-total strong { + display: block; + margin-top: 0.15rem; + font-size: 1.8rem; + line-height: 1; + color: #8b2e17; +} +.chat-pill-row { + position: relative; + z-index: 1; + display: flex; + flex-wrap: wrap; + gap: 0.4rem; + margin-bottom: 0.75rem; +} +.chat-pill { + border: 1px solid rgba(91, 70, 52, 0.55); + border-radius: 999px; + background: rgba(255, 255, 255, 0.66); + color: #221b18; + font-size: 0.78rem; + font-weight: 700; + padding: 0.2rem 0.7rem; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.55); +} +.chat-pill.success { + background: rgba(46, 107, 58, 0.16); + color: #122b17; + border-color: rgba(46, 107, 58, 0.32); +} +.chat-pill.failure { + background: rgba(132, 44, 44, 0.16); + color: #561d1d; + border-color: rgba(132, 44, 44, 0.32); +} +.chat-keyline { + position: relative; + z-index: 1; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.4rem; + margin-bottom: 0.75rem; +} +.chat-keyline-label { + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.12em; + text-transform: uppercase; + color: #6d5a4f; +} +.roll-values { + display: flex; + gap: 0.4rem; + flex-wrap: wrap; + margin: 0; +} +.roll-values span { + border: 1px solid rgba(91, 70, 52, 0.45); + border-radius: 999px; + background: rgba(255, 255, 255, 0.72); + padding: 0.22rem 0.55rem; + font-weight: 700; +} +.chat-details { + position: relative; + z-index: 1; + margin: 0.75rem 0 0; + padding-left: 1.1rem; +} +.chat-details-ornate { + margin-top: 1rem; + padding-top: 0.75rem; + border-top: 1px solid rgba(91, 70, 52, 0.35); +} +.chat-details li + li { + margin-top: 0.25rem; +} +.chat-actions { + position: relative; + z-index: 1; + margin-top: 0.75rem; +} +.chat-action-button { + border: 1px solid #5b4634; + border-radius: 999px; + background: linear-gradient(180deg, #f9f0da 0%, #dcb772 100%); + color: #221b18; + min-height: 2rem; + padding: 0.45rem 0.9rem; + font-weight: 800; + letter-spacing: 0.04em; + box-shadow: 0 6px 14px rgba(0, 0, 0, 0.16); +} +.chat-action-button[disabled] { + opacity: 0.55; + cursor: not-allowed; + box-shadow: none; +} +.chat-actions-inline { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; +} +.chat-targeting { + position: relative; + z-index: 1; + display: grid; + gap: 0.4rem; + margin-top: 0.4rem; +} +.chat-control { + display: grid; + gap: 0.2rem; +} +.chat-select { + min-height: 2rem; + border: 1px solid rgba(91, 70, 52, 0.55); + border-radius: 999px; + background: rgba(255, 255, 255, 0.82); + color: #221b18; + padding: 0.3rem 0.75rem; +} +.chat-formula, +.chat-note { + position: relative; + z-index: 1; + margin: 0 0 0.75rem; +} +.chat-formula { + display: inline-flex; + align-items: center; + min-height: 2rem; + padding: 0.25rem 0.7rem; + border-radius: 999px; + border: 1px solid rgba(91, 70, 52, 0.38); + background: rgba(255, 255, 255, 0.5); + font-family: "IM Fell English SC", "Palatino Linotype", "Book Antiqua", Palatino, serif; + color: #6d5a4f; +} +.chat-item-image { + width: 64px; + height: 64px; + object-fit: cover; + border-radius: 6px; + border: 1px solid #5b4634; +} +.chat-item-body { + position: relative; + z-index: 1; + display: grid; + grid-template-columns: 64px 1fr; + gap: 0.75rem; + align-items: start; + margin-bottom: 0.75rem; +} +.chat-item-content { + min-width: 0; +} +.chat-description { + position: relative; + z-index: 1; + margin-top: 0.75rem; + padding-top: 0.75rem; + border-top: 1px solid rgba(91, 70, 52, 0.35); +} +.warning { + color: #842c2c; + font-weight: 700; +} +.dnc-chat-card-roll { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.78) 0%, rgba(236, 228, 205, 0.92) 100%), linear-gradient(135deg, #fcf8ee 0%, #e4d1af 100%); +} +.dnc-chat-card-damage { + padding: 0.75rem; + background: linear-gradient(180deg, rgba(255, 252, 247, 0.76) 0%, rgba(238, 213, 194, 0.92) 100%), linear-gradient(135deg, #fff4e8 0%, #d7a884 100%); +} +.dnc-chat-card-damage .chat-card-header, +.dnc-chat-card-damage .chat-pill-row, +.dnc-chat-card-damage .chat-keyline, +.dnc-chat-card-damage .chat-formula, +.dnc-chat-card-damage .chat-note { + margin-bottom: 0.4rem; +} +.dnc-chat-card-damage .chat-card-total { + min-width: 4.8rem; + padding: 0.35rem 0.65rem; +} +.dnc-chat-card-damage .chat-card-total strong { + font-size: 1.45rem; +} +.dnc-chat-card-damage .chat-formula { + min-height: 1.7rem; + padding: 0.15rem 0.6rem; + font-size: 0.82rem; +} +.dnc-chat-card-damage .chat-note { + font-size: 0.82rem; +} +.dnc-chat-card-damage-application .chat-pill.success { + background: rgba(46, 107, 58, 0.18); +} +.dnc-chat-card-usage { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.76) 0%, rgba(222, 230, 214, 0.92) 100%), linear-gradient(135deg, #f6f6ef 0%, #bfcbb1 100%); +} +.dnc-chat-card-item { + background: linear-gradient(180deg, rgba(255, 255, 255, 0.8) 0%, rgba(223, 216, 201, 0.92) 100%), linear-gradient(135deg, #fef9ef 0%, #d1c4aa 100%); +} +.dnc-chat-card-initiative { + background: linear-gradient(180deg, rgba(255, 248, 236, 0.82) 0%, rgba(228, 208, 170, 0.94) 100%), linear-gradient(135deg, #fff8ec 0%, #d7bf85 100%); +} +.dnc-chat-card-spell { + background: linear-gradient(180deg, rgba(249, 246, 255, 0.8) 0%, rgba(222, 213, 244, 0.92) 100%), linear-gradient(135deg, #fcf8ff 0%, #b8abd9 100%); +} +.dnc-chat-card-chaos { + background: linear-gradient(180deg, rgba(255, 247, 247, 0.82) 0%, rgba(232, 198, 198, 0.94) 100%), linear-gradient(135deg, #fff6f2 0%, #d49494 100%); +} +.dnc-chat-card-favor { + background: linear-gradient(180deg, rgba(248, 251, 255, 0.8) 0%, rgba(205, 220, 238, 0.94) 100%), linear-gradient(135deg, #f7fbff 0%, #9fb8d7 100%); +} +.dnc-chat-card-spell .chat-actions + .chat-actions { + margin-top: 0.4rem; +} +.chat-chaos-result { + position: relative; + z-index: 1; + margin-bottom: 0.75rem; + padding: 0.4rem 0.75rem; + border-radius: 6px; + background: rgba(255, 255, 255, 0.45); + border: 1px solid rgba(91, 70, 52, 0.35); +} +.chat-chaos-result-title { + margin: 0 0 0.25rem; + font-weight: 800; +} +.initiative-header { + margin-bottom: 1rem; +} +.initiative-header p { + margin: 0.15rem 0 0; + color: #6d5a4f; +} +.initiative-total { + min-width: 5.5rem; + border: 2px solid rgba(139, 46, 23, 0.65); + border-radius: 10px; + background: rgba(255, 255, 255, 0.5); + padding: 0.45rem 0.75rem; + text-align: center; +} +.initiative-total-label, +.initiative-part-label { + display: block; + font-size: 0.72rem; + letter-spacing: 0.04em; + text-transform: uppercase; + color: #6d5a4f; +} +.initiative-total strong { + display: block; + font-size: 1.8rem; + line-height: 1; + color: #8b2e17; +} +.initiative-breakdown { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.4rem; + margin-bottom: 0.75rem; +} +.initiative-part { + min-width: 4.5rem; + border-radius: 6px; + background: rgba(255, 255, 255, 0.55); + border: 1px solid rgba(91, 70, 52, 0.4); + padding: 0.35rem 0.55rem; + text-align: center; +} +.initiative-part strong, +.initiative-operator { + font-size: 1.1rem; + font-weight: 700; +} +.initiative-formula { + margin: 0 0 0.75rem; + font-family: "IM Fell English SC", "Palatino Linotype", "Book Antiqua", Palatino, serif; + color: #6d5a4f; +} +.initiative-sync p { + margin: 0.4rem 0 0; +} +/*# sourceMappingURL=donjon-et-cie.css.map */ +/*# sourceMappingURL=donjon-et-cie.css.map */ diff --git a/styles/donjon-et-cie.css.map b/styles/donjon-et-cie.css.map new file mode 100644 index 0000000..e0cb8f2 --- /dev/null +++ b/styles/donjon-et-cie.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../variables.less","../base.less","../components.less","../actor-sheet.less","../item-sheet.less","../dialogs.less","../chat.less"],"names":[],"mappings":"AAAA;EACE,aAAa,oBAAb;EACA,SAAS,0CAA0C,OAAO,WAA1D;EACA,gBAAA;EACA,kBAAA;EACA,kBAAA;;ACLF;EACE,kBAAA;EACA,qBAAA;;AAGF,mBAAoB;EAClB,aDEU,qBCFV;EACA,cAAA;EACA,YAAY,iDAAZ;;AAGF;EACE,eAAA;;AAGF,MAAM;EACJ,WAAA;;AAGF,MAAO;EACL,WAAA;EACA,+CAAA;;AAGF,MAAO;EACL,UAAA;EACA,SAAA;EACA,QAAA;;AAGF,MAAM;EACJ,SAAS,EAAT;EACA,cAAA;EACA,gBAAgB,uDAAhB;EACA,aAAA;EACA,YAAA;EACA,sBAAA;EACA,mDAAA;EACA,yBAAA;EACA,QAAQ,4CAAR;;AAGF;EACE;EACA;IACE,WAAW,YAAY,aAAvB;IACA,QAAQ,2CAAR;;EAGF;IACE,WAAW,YAAY,gBAAvB;IACA,QAAQ,4CAAR;;;AAIJ;EACE,aAAA;EACA,sBAAA;EACA,SAAA;EACA,aAAA;;AAGF;EACE,yBAAA;EACA,mBAAA;EACA,qCAAA;EACA,0CAAA;EACA,aAAA;;AAGF,mBAAoB,YAAY;AAChC,mBAAoB,eAAe;EACjC,mBAAA;EACA,aDhEa,sBAAsB,qBAAqB,+BCgExD;EACA,kBAAA;EACA,cAAA;EACA,yBAAA;EACA,sBAAA;;AAGF;EACE,aAAA;EACA,gCAAA;EACA,SAAA;EACA,kBAAA;;AAGF,aAAa;EACX,gCAAA;EACA,YAAA;;AAGF;EACE,kBAAA;;AAGF,SAAU;EACR,WAAA;EACA,eAAA;EACA,iBAAA;EACA,mBAAA;EACA,yBAAA;EACA,gBAAA;;AAGF;EACE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,SAAA;EACA,oBAAA;EACA,mBAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;;AAGF;AACA,cAAc;EACZ,aAAA;EACA,uBAAuB,UAAU,eAAjC;EACA,YAAA;;AAGF,cAAc;EACZ,uBAAuB,UAAU,eAAjC;;AAGF,kBAAmB,cAAa,QAAS;EACvC,uBAAuB,UAAU,eAAjC;EACA,mBAAA;;AAGF,kBAAmB,cAAa,QAAS;EACvC,YAAA;;AAGF,kBAAmB,cAAa,QAAS,MAAK;EAC5C,kBAAA;;AAGF,kBAAmB,cAAa,QAAS,eAAe,MAAK;EAC3D,eAAA;;AAGF,cAAe,cAAa,QAAS;EACnC,uBAAuB,UAAU,eAAjC;EACA,mBAAA;;AAGF,cAAe,cAAa,QAAS;EACnC,YAAA;;AAGF,cAAe,cAAa,QAAS,MAAK;EACxC,aAAA;EACA,iBAAA;;AAGF,cAAe,cAAa,QAAS,eAAe,MAAK;EACvD,cAAA;EACA,kBAAA;;AAGF,UAAW;EACT,aAAA;EACA,sBAAA;EACA,WAAA;;AAGF,UAAW,MAAM;EACf,iBAAA;EACA,yBAAA;EACA,sBAAA;EACA,cAAA;;AAGF;EACE,aAAA;EACA,sBAAA;EACA,WAAA;;AAGF,eAAgB;EACd,iBAAA;EACA,yBAAA;EACA,sBAAA;EACA,cAAA;;AAGF,eAAgB;EACd,SAAA;EACA,wCAAA;EACA,kBAAA;EACA,qCAAA;EACA,cAAA;EACA,wBAAA;;AAGF,UAAW;AACX,UAAW;AACX,UAAW;AACX,gBAAiB;AACjB,gBAAiB;EACf,WAAA;EACA,wCAAA;EACA,kBAAA;EACA,oCAAA;EACA,cAAA;EACA,wBAAA;;AAGF,UAAW;EACT,gBAAA;EACA,kBAAA;;AAGF;EACE,aAAA;EACA,uBAAuB,wBAAvB;EACA,SAAA;;AAGF;EACE,aAAA;EACA,uBAAuB,UAAU,eAAjC;EACA,SAAA;;AAGF;EACE,0BAAA;;ACtOF;EACE,aAAA;EACA,mBAAA;EACA,WAAA;;AAGF,cAAe;AACf,aAAc;AACd,aAAc;AACd;AACA;EACE,yBAAA;EACA,kBAAA;EACA,YAAY,iDAAZ;EACA,cAAA;EACA,gBAAA;EACA,wBAAA;;AAGF;EACE,mBAAA;;AAGF;EACE,WAAA;EACA,UAAA;;AAGF;EACE,WAAA;;AAGF;EACE,aAAA;EACA,8BAAA;EACA,mBAAA;EACA,YAAA;EACA,sBAAA;;AAGF;EACE,SAAA;EACA,cAAA;EACA,kBAAA;;AAGF;EACE,mBAAA;;AC/CF;EACE,aAAA;EACA,sBAAA;EACA,WAAA;;AAGF;EACE,aAAA;EACA,oCAAA;EACA,WAAA;EACA,mBAAA;;AAGF;EACE,gBAAA;;AAGF;EACE,aAAA;EACA,0BAAA;EACA,YAAA;;AAGF;EACE,WAAA;;AAGF;EACE,aAAA;EACA,uBAAuB,kBAAkB,qBAAzC;EACA,SAAA;EACA,kBAAA;;AAGF;EACE,aAAA;EACA,sBAAA;EACA,YAAA;;AAGF;EACE,iBAAA;EACA,gBAAA;EACA,yCAAA;EACA,mBAAA;EACA,qCAAA;;AAGF,aAAc;EACZ,qBAAA;;AAGF;EACE,mBAAA;EACA,cAAA;EACA,kBAAA;;AAGF;EACE,aAAA;EACA,WAAA;;AAGF;EACE,aAAA;EACA,uBAAuB,0BAAvB;EACA,WAAA;EACA,gBAAA;;AAGF;EACE,kBAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,kBAAA;EACA,oCAAA;EACA,wCAAA;EACA,gBAAA;;AAGF;EACE,kBAAA;EACA,sBAAA;;AAGF,aAAc;EACZ,aAAA;EACA,sBAAA;EACA,YAAA;;AAGF;EACE,aAAA;EACA,uBAAuB,iBAAiB,mBAAxC;EACA,YAAA;EACA,gBAAA;;AAGF;EACE,mBAAA;;AAGF,oBAAqB;EACnB,kBAAA;EACA,kBAAA;;AAGF;EACE,kBAAA;EACA,cAAA;EACA,kBAAA;EACA,kBAAA;;AAGF;EACE,WAAA;EACA,yBAAA;EACA,iBAAA;;AAGF,YAAa;AACb,YAAa;EACX,uBAAA;EACA,wCAAA;EACA,mBAAA;;AAGF,YAAa;EACX,gBAAA;EACA,qCAAA;;AAGF;EACE,aAAA;EACA,eAAA;EACA,WAAA;EACA,sBAAA;EACA,uBAAA;;AAGF;EACE,uCAAA;EACA,mBAAA;EACA,qCAAA;EACA,cAAA;EACA,gBAAA;EACA,uBAAA;;AAGF,UAAU;EACR,mBAAA;EACA,qBAAA;EACA,WAAA;;AAGF;EACE,aAAA;;AAGF,gBAAgB;EACd,cAAA;;AAGF;EACE,aAAA;EACA,sBAAA;EACA,YAAA;;AAGF,aAAa;EACX,qBAAA;EACA,4CAAA;;AAGF;EACE,yCAAA;EACA,mBAAA;EACA,gBAAA;EACA,mBAAA;EACA,qCAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;;AAGF,cAAc;EACZ,uBAAA;EACA,iBAAA;;AAGF,aAAa,YAAa;EACxB,qBAAA;EACA,mCAAA;EACA,cAAA;;AAGF;EACE,aAAA;EACA,oCAAA;EACA,YAAA;EACA,kBAAA;EACA,6CAAA;EACA,oBAAA;;AAGF,KAAK;EACH,aAAA;EACA,cAAA;;AAGF,KAAM;EACJ,WAAA;EACA,YAAA;EACA,iBAAA;EACA,kBAAA;EACA,yBAAA;EACA,gBAAA;;AAGF,UAAW;EACT,kBAAA;EACA,cAAA;;AAGF;EACE,aAAA;EACA,eAAA;EACA,WAAA;EACA,mBAAA;;AAGF;EACE,oBAAA;EACA,mBAAA;EACA,cAAA;EACA,kBAAA;EACA,sBAAA;;AAGF;EACE,aAAA;EACA,eAAA;EACA,WAAA;EACA,yBAAA;;AAGF,WAAY;EACV,aAAA;EACA,sBAAA;EACA,YAAA;;AAGF;EACE,aAAA;EACA,uBAAuB,UAAU,eAAjC;EACA,YAAA;EACA,gBAAA;;AAGF,gBAAiB;EACf,mBAAA;;ACzQF,YAAY,mBAAmB;EAC7B,wBAAA;EACA,sBAAA;EACA,yBAAA;;AAGF,YAAY,mBAAmB,KAAM;EACnC,kBAAA;EACA,UAAA;EACA,sBAAA;EACA,cAAA;;AAGF,YAAY,mBAAmB,KAAM;EACnC,sBAAA;EACA,cAAA;EACA,2BAAA;EACA,6BAAA;;AAGF,YAAY,mBAAmB,KAAM,kBAAkB;EACrD,uBAAA;;AAGF,eAAgB;EACd,uBAAuB,UAAU,eAAjC;;AAGF;EACE,aAAA;EACA,YAAA;EACA,yBAAA;;AC/BF;EACE,aAAA;EACA,sBAAA;EACA,YAAA;;AAGF;AACA,gBAAiB;AACjB;AACA,gBAAiB;AACjB,gBAAiB;AACjB,gBAAiB,MAAM;EACrB,cAAA;;AAGF,gBAAiB;EACf,SAAA;;AAGF,gBAAiB;EACf,aAAA;EACA,sBAAA;EACA,WAAA;EACA,gBAAA;;AAGF,gBAAiB,MAAM;EACrB,kBAAA;EACA,gBAAA;EACA,sBAAA;EACA,yBAAA;;AAGF,gBAAiB;EACf,YAAY,iDAAZ;;AClCF;EACE,kBAAA;EACA,yBAAA;EACA,mBAAA;EACA,YACE,uFACA,iDAFF;EAGA,cAAA;EACA,aAAA;EACA,oFAAA;EACA,gBAAA;;AAGF,aAAc,iBAAiB,eAAe;EAC5C,oBAAA;EACA,kBAAA;EACA,gBAAA;EACA,sBAAA;;AAGF,cAAc;EACZ,SAAS,EAAT;EACA,kBAAA;EACA,QAAA;EACA,sBAAA;EACA,oBAAA;EACA,YACE,kFACA,qGAFF;;AAKF;EACE,kBAAA;EACA,UAAA;EACA,aAAA;EACA,8BAAA;EACA,uBAAA;EACA,YAAA;EACA,sBAAA;;AAGF;EACE,YAAA;;AAGF;EACE,mBAAA;EACA,iBAAA;EACA,gBAAA;EACA,sBAAA;EACA,yBAAA;EACA,6BAAA;;AAGF;EACE,kBAAA;EACA,cAAA;;AAGF;AACA;EACE,kBAAA;EACA,UAAA;EACA,cAAA;;AAGF;EACE,iBAAA;EACA,oBAAA;EACA,wCAAA;EACA,qCAAA;EACA,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,sBAAA;;AAGF,eAAe;EACb,cAAA;;AAGF,eAAe;EACb,cAAA;;AAGF;EACE,kBAAA;EACA,mBAAA;EACA,wCAAA;EACA,YAAY,qFAAZ;EACA,uBAAA;EACA,kBAAA;;AAGF,gBAAiB;EACf,cAAA;EACA,kBAAA;EACA,gBAAA;EACA,sBAAA;EACA,yBAAA;EACA,cAAA;;AAGF,gBAAiB;EACf,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,cAAA;EACA,cAAA;;AAGF;EACE,kBAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,WAAA;EACA,sBAAA;;AAGF;EACE,wCAAA;EACA,oBAAA;EACA,qCAAA;EACA,cAAA;EACA,kBAAA;EACA,gBAAA;EACA,sBAAA;EACA,mDAAA;;AAGF,UAAU;EACR,mCAAA;EACA,cAAA;EACA,qCAAA;;AAGF,UAAU;EACR,mCAAA;EACA,cAAA;EACA,qCAAA;;AAGF;EACE,kBAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;EACA,WAAA;EACA,sBAAA;;AAGF;EACE,kBAAA;EACA,gBAAA;EACA,sBAAA;EACA,yBAAA;EACA,cAAA;;AAGF;EACE,aAAA;EACA,WAAA;EACA,eAAA;EACA,SAAA;;AAGF,YAAa;EACX,wCAAA;EACA,oBAAA;EACA,qCAAA;EACA,wBAAA;EACA,gBAAA;;AAGF;EACE,kBAAA;EACA,UAAA;EACA,mBAAA;EACA,oBAAA;;AAGF;EACE,gBAAA;EACA,oBAAA;EACA,4CAAA;;AAGF,aAAc,GAAG;EACf,mBAAA;;AAGF;EACE,kBAAA;EACA,UAAA;EACA,mBAAA;;AAGF;EACE,yBAAA;EACA,oBAAA;EACA,YAAY,iDAAZ;EACA,cAAA;EACA,gBAAA;EACA,uBAAA;EACA,gBAAA;EACA,sBAAA;EACA,0CAAA;;AAGF,mBAAmB;EACjB,aAAA;EACA,mBAAA;EACA,gBAAA;;AAGF;EACE,aAAA;EACA,eAAA;EACA,WAAA;;AAGF;EACE,kBAAA;EACA,UAAA;EACA,aAAA;EACA,WAAA;EACA,kBAAA;;AAGF;EACE,aAAA;EACA,WAAA;;AAGF;EACE,gBAAA;EACA,wCAAA;EACA,oBAAA;EACA,qCAAA;EACA,cAAA;EACA,uBAAA;;AAGF;AACA;EACE,kBAAA;EACA,UAAA;EACA,mBAAA;;AAGF;EACE,oBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,oBAAA;EACA,wCAAA;EACA,oCAAA;EACA,aN5Pa,sBAAsB,qBAAqB,+BM4PxD;EACA,cAAA;;AAGF;EACE,WAAA;EACA,YAAA;EACA,iBAAA;EACA,kBAAA;EACA,yBAAA;;AAGF;EACE,kBAAA;EACA,UAAA;EACA,aAAA;EACA,+BAAA;EACA,YAAA;EACA,kBAAA;EACA,sBAAA;;AAGF;EACE,YAAA;;AAGF;EACE,kBAAA;EACA,UAAA;EACA,mBAAA;EACA,oBAAA;EACA,4CAAA;;AAGF;EACE,cAAA;EACA,gBAAA;;AAGF;EACE,YACE,uFACA,iDAFF;;AAKF;EACE,gBAAA;EACA,YACE,uFACA,iDAFF;;AAKF,qBAAsB;AACtB,qBAAsB;AACtB,qBAAsB;AACtB,qBAAsB;AACtB,qBAAsB;EACpB,qBAAA;;AAGF,qBAAsB;EACpB,iBAAA;EACA,wBAAA;;AAGF,qBAAsB,iBAAiB;EACrC,kBAAA;;AAGF,qBAAsB;EACpB,kBAAA;EACA,uBAAA;EACA,kBAAA;;AAGF,qBAAsB;EACpB,kBAAA;;AAGF,iCAAkC,WAAU;EAC1C,mCAAA;;AAGF;EACE,YACE,uFACA,iDAFF;;AAKF;EACE,YACE,sFACA,iDAFF;;AAKF;EACE,YACE,uFACA,iDAFF;;AAKF;EACE,YACE,sFACA,iDAFF;;AAKF;EACE,YACE,uFACA,iDAFF;;AAKF;EACE,YACE,sFACA,iDAFF;;AAKF,oBAAqB,cAAc;EACjC,kBAAA;;AAGF;EACE,kBAAA;EACA,UAAA;EACA,sBAAA;EACA,uBAAA;EACA,kBAAA;EACA,qCAAA;EACA,wCAAA;;AAGF;EACE,mBAAA;EACA,gBAAA;;AAGF;EACE,mBAAA;;AAGF,kBAAmB;EACjB,mBAAA;EACA,cAAA;;AAGF;EACE,iBAAA;EACA,yCAAA;EACA,mBAAA;EACA,oCAAA;EACA,wBAAA;EACA,kBAAA;;AAGF;AACA;EACE,cAAA;EACA,kBAAA;EACA,sBAAA;EACA,yBAAA;EACA,cAAA;;AAGF,iBAAkB;EAChB,cAAA;EACA,iBAAA;EACA,cAAA;EACA,cAAA;;AAGF;EACE,aAAA;EACA,eAAA;EACA,mBAAA;EACA,WAAA;EACA,sBAAA;;AAGF;EACE,iBAAA;EACA,kBAAA;EACA,qCAAA;EACA,uCAAA;EACA,wBAAA;EACA,kBAAA;;AAGF,gBAAiB;AACjB;EACE,iBAAA;EACA,gBAAA;;AAGF;EACE,mBAAA;EACA,aNjca,sBAAsB,qBAAqB,+BMicxD;EACA,cAAA;;AAGF,gBAAiB;EACf,kBAAA","file":"donjon-et-cie.css","sourcesContent":[]} \ No newline at end of file diff --git a/system.json b/system.json new file mode 100644 index 0000000..ec9457d --- /dev/null +++ b/system.json @@ -0,0 +1,127 @@ +{ + "id": "fvtt-donjon-et-cie", + "title": "Donjon & Cie", + "description": "Systeme FoundryVTT pour le jeu de role Donjon & Cie", + "version": "14.0.0", + "compatibility": { + "minimum": "13", + "verified": "14" + }, + "authors": [ + { + "name": "Copilot" + } + ], + "esmodules": [ + "modules/donjon-et-cie-main.mjs" + ], + "languages": [ + { + "lang": "fr", + "name": "Francais", + "path": "lang/fr.json" + } + ], + "styles": [ + "styles/donjon-et-cie.css" + ], + "packs": [ + { + "type": "Item", + "label": "Equipement", + "name": "equipment", + "path": "packs/equipment", + "system": "fvtt-donjon-et-cie", + "flags": {}, + "ownership": { + "PLAYER": "OBSERVER", + "ASSISTANT": "OWNER" + } + }, + { + "type": "RollTable", + "label": "Tables aléatoires", + "name": "random-tables", + "path": "packs/random-tables", + "system": "fvtt-donjon-et-cie", + "flags": {}, + "ownership": { + "PLAYER": "OBSERVER", + "ASSISTANT": "OWNER" + } + } + ], + "documentTypes": { + "Actor": { + "employe": { + "htmlFields": [ + "profil.objectifPersonnel", + "notes", + "gmnotes" + ] + }, + "pnj": { + "htmlFields": [ + "description", + "notes" + ] + } + }, + "Item": { + "trait": { + "htmlFields": [ + "description", + "notes" + ] + }, + "langue": { + "htmlFields": [ + "description", + "notes" + ] + }, + "capacite": { + "htmlFields": [ + "description", + "notes" + ] + }, + "sortilege": { + "htmlFields": [ + "description", + "notes" + ] + }, + "arme": { + "htmlFields": [ + "description", + "notes" + ] + }, + "armure": { + "htmlFields": [ + "description", + "notes" + ] + }, + "equipement": { + "htmlFields": [ + "description", + "notes" + ] + }, + "consommable": { + "htmlFields": [ + "description", + "notes" + ] + } + } + }, + "primaryTokenAttribute": "sante.pv.value", + "secondaryTokenAttribute": "profil.suspicion", + "grid": { + "distance": 5, + "units": "m" + } +} diff --git a/templates/actors/employe-sheet.hbs b/templates/actors/employe-sheet.hbs new file mode 100644 index 0000000..3146341 --- /dev/null +++ b/templates/actors/employe-sheet.hbs @@ -0,0 +1,416 @@ +
{{this.system.effet}}
{{/if}} + {{#if this.system.degats}}Degats : {{this.system.degats}}
{{/if}} +{{this.system.effet}}
{{/if}} + {{#if this.system.degats}}Degats : {{this.system.degats}}
{{/if}} +{{magicResources.rank}}
+{{magicResources.focusDisplay}}
+Aberration magique
+| Δ | +Resultat | +Effet | +
|---|---|---|
| {{this.value}} | +{{this.title}} | +{{this.effect}} | +
{{this.system.effet}}
{{/if}} + {{#if this.system.degats}}Degats : {{this.system.degats}}
{{/if}} +{{this.system.effet}}
{{/if}} + {{#if this.system.degats}}Degats : {{this.system.degats}}
{{/if}} +Les coups de pouce se choisissent dans les fenetres de jet. Les services brulent automatiquement une faveur.
+{{this.system.effet}}
{{/if}} + {{#if this.system.degats}}Degats : {{this.system.degats}}
{{/if}} +{{storedArmor}}
+ARM {{armorDisplay}} · COU {{courageDisplay}}
+{{this.system.effet}}
{{/if}} + {{#if this.system.degats}}Degats : {{this.system.degats}}
{{/if}} +{{this.system.effet}}
{{/if}} + {{#if this.system.description}}{{this.system.description}}
{{/if}} +Chaos
+La magie opere malgre l'echec ; le MJ determine les consequences.
+{{value}} · {{chaosEntry.title}}
+{{chaosEntry.effect}}
+Le de du Chaos descend d'un cran.
+ {{/if}} + {{#if exhausted}} +Le de du Chaos est trop faible pour etre reutilise dans le Donjon.
+ {{/if}} +Application
+{{subtitle}}
+Source : {{sourceLabel}}
{{/if}} + {{#if useArmor}} ++ {{#if armorAvailable}} + {{armorLabel}} : {{armorBefore}} -> {{armorAfter}} + {{else}} + Armure : aucune protection enregistrée + {{/if}} +
+ {{/if}} +PV : {{pvBefore}} -> {{pvAfter}} / {{pvMax}}
+Impact
+{{subtitle}}
{{/if}} +{{formula}}
+ {{#if rollDieLabels.[1]}} +{{#each rollDieLabels}}{{this}}{{/each}}
+Base : {{baseDamage}}{{#if bonus}} · Bonus : +{{bonus}}{{/if}}
+Reseau
+{{subtitle}}
{{/if}} +{{note}}
+Vitalite
+{{actorName}}
+{{formula}}
+ {{#if dieValues.length}} +{{#each dieValues}}{{this}}{{/each}}
+Ordre de marche
+{{actorName}}
+ {{#if modeLabel}}{{modeLabel}}
{{/if}} +{{formula}}
+ {{#if dieValues.[1]}} +Lancers : {{#each dieValues}}{{this}}{{/each}}
+ {{/if}} + + {{#if syncedCombat}} +{{syncedCombat.name}} · rang {{syncedCombat.rank}} / {{syncedCombat.total}}
+Objet
+{{item.type}}
+Effet : {{item.system.effet}}
{{/if}} +Resolution
+{{subtitle}}
{{/if}} +{{#each values}}{{this}}{{/each}}
+Faveur : {{favorNote}}
+ {{/if}} + {{#if showDamageButton}} +Magie
+{{subtitle}}
{{/if}} +{{#each values}}{{this}}{{/each}}
++ Desavantage automatique : + {{#if autoDisadvantageCanceled}} + le cout du sort depasse le rang du lanceur, mais une faveur l'a annule. + {{else}} + le cout du sort depasse le rang du lanceur. + {{/if}} +
+ {{/if}} + {{#if favorNote}} +Faveur : {{favorNote}}
+ {{/if}} + {{#if focusValue}} ++ Focus : {{focusValue}} depuis {{focusBeforeLabel}} + {{#if focusSpent}} · {{focusSpent}} utilise{{/if}} + · {{focusRemaining}} restant + {{#if focusDegraded}} · le focus descend a {{focusAfterLabel}}{{/if}} + {{#if focusRolled}} · premier sort de la scene{{/if}} +
+ {{else}} + {{#if focusRolled}} +Focus : aucun apport pour cette scene.
+ {{/if}} + {{/if}} +PV depenses : {{spentPv}} · PV restants : {{remainingPv}}
+ {{#if specialNote}} +{{specialNote}}
+ {{/if}} + {{#if showDamageButton}} +Usure
+{{#each values}}{{this}}{{/each}}
+Protection stockee pour ce combat : {{protectionStored}}.
{{/if}} + {{#if degraded}}La ressource s'amenuise.
{{else}}La ressource tient bon.
{{/if}} + {{#if exhausted}}La ressource est epuisee.
{{/if}} +{{actorName}} effectue un jet de {{characteristic.label}}.
+ + {{#if hasFavorOptions}} + + {{/if}} +{{item.name}} inflige {{item.system.degats}}.
+Bonus de degats de l'acteur : {{actorBonus}}
+ +{{actorName}} lance l'initiative.
+DEX actuelle : {{dex}}, bonus de fiche : {{initiativeBonus}}
+ +{{actorName}} lance {{item.name}}.
+ + + + + + + + {{#if hasFavorOptions}} + + {{/if}} + {{#if autoDisadvantage}} +Le cout depasse le rang du lanceur : le jet se fera automatiquement avec desavantage.
+ {{/if}} +Utiliser {{item.name}} et lancer son de d'usage actuel.
+Valeur actuelle : Δ{{item.system.delta}}
+ +{{actorName}} attaque avec {{item.name}}.
+Caracteristique utilisee : {{characteristicLabel}} ({{characteristicValue}}).
+ + {{#if hasFavorOptions}} + + {{/if}} +{{weaponCharacteristicLabel}}
+{{armorProtectionDisplay}}
+